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

Reply via email to