This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug target/47744] [x32] ICE: in reload_cse_simplify_operands, at postreload.c:403


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47744

--- Comment #14 from Uros Bizjak <ubizjak at gmail dot com> 2011-07-17 20:07:38 UTC ---
(In reply to comment #13)
> Looking at the example in Comment #0, RTX expansion pass generates:
> 
> ;; D.2794_77 = &q + D.2793_76;
> 
> (insn 84 83 85 (parallel [
>             (set (reg:DI 173)
>                 (plus:DI (reg/f:DI 54 virtual-stack-vars)
>                     (const_int -160 [0xffffffffffffff60])))
>             (clobber (reg:CC 17 flags))
>         ]) pr47744.c:5 -1
>      (nil))
> 
> Why 64bit virtual register to hold &q _address_?

Later, reg:DI 173 gets propagated into (insn 89):

(insn 89 87 90 3 (set (reg:SI 177)
        (plus:SI (plus:SI (mult:SI (reg:SI 175)
                    (const_int 8 [0x8]))
                (subreg:SI (reg/f:DI 20 frame) 0))
            (const_int -160 [0xffffffffffffff60]))) pr47744.c:5 250
{*lea_2_x32}
     (expr_list:REG_DEAD (reg:SI 175)
        (nil)))

which chokes reload when trying to eliminate frame pointer:

(insn 89 87 90 3 (set (reg:SI 39 r10 [177])
        (plus:SI (plus:SI (mult:SI (reg:SI 0 ax [175])
                    (const_int 8 [0x8]))
                (subreg:SI (plus:DI (reg/f:DI 7 sp)
                        (const_int 200 [0xc8])) 0))
            (const_int -160 [0xffffffffffffff60]))) pr47744.c:5 250
{*lea_2_x32}
     (nil))


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]