[Bug rtl-optimization/55154] [4.8 Regression] ICE: in curr_insn_transform, at lra-constraints.c:2702 with custom flags

ubizjak at gmail dot com gcc-bugzilla@gcc.gnu.org
Thu Nov 1 10:41:00 GMT 2012


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

--- Comment #2 from Uros Bizjak <ubizjak at gmail dot com> 2012-11-01 10:40:37 UTC ---
(In reply to comment #1)
> Started with http://gcc.gnu.org/viewcvs?view=revision&revision=192719
> The interesting thing is that this happened before, definitely in r190614,
> afterwards was fixed in some commit, and 190777 was fine.

As the test name implies, it was PR46254. The problem there was that %rbx is
declared as fixed reg for "-fpic -mcmodel=large" case. Fixed regs are
unavailable to RA, so we have to handle it in a special way.

This PR shows a deficiency in how subregs are handled in LRA. The test lives
and dies by correct subreg handling in the RA.

For reference, pre-LRA allocator resolved allocation for problematic insn with:

Reloads for insn # 10
Reload 0: reload_in (DI) = (subreg:DI (reg:TI 60 [ i.1 ]) 0)
        reload_out (DI) = (reg:DI 4 si)
        AREG, RELOAD_OTHER (opnum = 0)
        reload_in_reg: (subreg:DI (reg:TI 60 [ i.1 ]) 0)
        reload_out_reg: (subreg:DI (reg:TI 4 si [65]) 0)
        reload_reg_rtx: (reg:DI 0 ax)
Reload 1: reload_in (DI) = (subreg:DI (reg:TI 60 [ i.1 ]) 8)
        reload_out (DI) = (reg:DI 5 di)
        DREG, RELOAD_OTHER (opnum = 1)
        reload_in_reg: (subreg:DI (reg:TI 60 [ i.1 ]) 8)
        reload_out_reg: (subreg:DI (reg:TI 4 si [65]) 8)
        reload_reg_rtx: (reg:DI 1 dx)
Reload 2: reload_in (DI) = (subreg:DI (reg:TI 60 [ i.1 ]) 0)
        reload_out (DI) = (scratch:DI)
        GENERAL_REGS, RELOAD_OTHER (opnum = 5)
        reload_in_reg: (subreg:DI (reg:TI 60 [ i.1 ]) 0)
        reload_out_reg: (scratch:DI)
        reload_reg_rtx: (reg:DI 38 r9)
Reload 3: reload_in (DI) = (subreg:DI (reg:TI 60 [ i.1 ]) 8)
        CREG, RELOAD_FOR_INPUT (opnum = 6)
        reload_in_reg: (subreg:DI (reg:TI 60 [ i.1 ]) 8)
        reload_reg_rtx: (reg:DI 2 cx)



More information about the Gcc-bugs mailing list