http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46843
Uros Bizjak <ubizjak at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2012-07-13 Target Milestone|--- |4.6.4 Summary|ICE: in spill_failure, at |ICE: in spill_failure, at |reload1.c:2157 |reload1.c:2157 |-fschedule-insns |-fschedule-insns |-fsched-pressure when using |-fsched-pressure |doubles | Ever Confirmed|0 |1 Known to fail| |4.7.2, 4.8.0 --- Comment #1 from Uros Bizjak <ubizjak at gmail dot com> 2012-07-13 15:07:28 UTC --- Confirmed. sched1 pass is moving insn that reads CX hard register after the shift: (insn 20 7 10 2 (parallel [ (set (reg/v:SI 64 [ n ]) (ashift:SI (reg:SI 85) (reg:QI 37 r8 [ s ]))) (clobber (reg:CC 17 flags)) ]) pr46843.c:3 498 {*ashlsi3_1} (expr_list:REG_DEAD (reg:SI 85) (expr_list:REG_DEAD (reg:QI 37 r8 [ s ]) (expr_list:REG_UNUSED (reg:CC 17 flags) (nil))))) (insn 10 20 13 2 (set (reg/v/f:DI 81 [ d2 ]) (reg:DI 2 cx [ d2 ])) pr46843.c:2 63 {*movdi_internal_rex64} (expr_list:REG_DEAD (reg:DI 2 cx [ d2 ]) (nil))) Probably not a good idea to increase live ranges of hard registers before register allocation pass. This PR is somehow related to PR 53942, where combine pass increased live range of CX register after shift insn.