http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50762
--- Comment #11 from Uros Bizjak <ubizjak at gmail dot com> 2011-11-10 13:10:19 UTC --- (In reply to comment #10) > It's a bit unfortunate that this just ICEs if the modified > address is no longer recognized. > > But if the lea_address_operand predicate is fixed as outlined > above, the problem should go away since the insn would then > be recognized. Indeed, changing lea_address_operand predicate to define_special_predicate allows compilation to pass reload. In fact, the predicate _was_ defined as special predicate until it was changed by ... well, ... me in the unrelated "cleanup" change [1] to fix PR 49780. So, with following patch: Index: config/i386/predicates.md =================================================================== --- config/i386/predicates.md (revision 181252) +++ config/i386/predicates.md (working copy) @@ -809,7 +809,7 @@ ;; Return true if op if a valid address for LEA, and does not contain ;; a segment override. -(define_predicate "lea_address_operand" +(define_special_predicate "lea_address_operand" (match_operand 0 "address_operand") { struct ix86_address parts; the compilation advances over reload pass to break with: tt.c: In function ‘func_59’: tt.c:48:1: internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1468 Please submit a full bug report, [1] http://gcc.gnu.org/ml/gcc-patches/2011-07/msg01555.html