https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66782
Uroš Bizjak <ubizjak at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Version|5.1.0 |6.0 Keywords| |ra Last reconfirmed| |2015-07-08 Component|target |rtl-optimization CC| |ubizjak at gmail dot com, | |vmakarov at gcc dot gnu.org Ever confirmed|0 |1 Summary|Unable to run 64-bit wine |[5/6 Regression] Unable to |after MS->SYSV register |run 64-bit wine after |changes |MS->SYSV register changes Target Milestone|--- |5.2 --- Comment #6 from Uroš Bizjak <ubizjak at gmail dot com> --- When compiled with "-O2 -fPIC", we have following sequence in _.ira dump: ... 211: r225:DI=[frame:DI-0x80] REG_EQUIV [frame:DI-0x80] 212: {r224:DI=r225:DI-r89:DI;clobber flags:CC;} REG_DEAD r225:DI REG_UNUSED flags:CC REG_EQUAL [frame:DI-0x80]-r89:DI 213: [r111:DI+r224:DI]=0x36646d61 214: [r111:DI+r224:DI+0x4]=0x34 REG_DEAD r224:DI 215: r121:DI=[frame:DI-0x80] 216: di:DI=r111:DI 217: ax:DI=call [`strlen'] argc:0 REG_DEAD di:DI REG_CALL_DECL `strlen' REG_EH_REGION 0 218: r227:DI=ax:DI REG_DEAD ax:DI 221: {r229:DI=r111:DI+r227:DI;clobber flags:CC;} REG_DEAD r227:DI REG_UNUSED flags:CC 222: {r230:DI=r89:DI-r121:DI;clobber flags:CC;} REG_UNUSED flags:CC ... and following in _.reload dump: ... 211: NOTE_INSN_DELETED 591: di:DI=[sp:DI+0x70] 633: si:DI=[sp:DI+0x18] 593: dx:DI=si:DI 212: {di:DI=di:DI-dx:DI;clobber flags:CC;} REG_EQUAL [frame:DI-0x80]-r89:DI 592: ax:DI=di:DI 213: [bp:DI+ax:DI]=0x36646d61 214: [bp:DI+ax:DI+0x4]=0x34 215: cx:DI=[sp:DI+0x70] 631: [sp:DI+0x28]=cx:DI 216: di:DI=bp:DI 217: ax:DI=call [`strlen'] argc:0 REG_CALL_DECL `strlen' REG_EH_REGION 0 218: ax:DI=ax:DI 221: {di:DI=bp:DI+ax:DI;clobber flags:CC;} 594: dx:DI=si:DI 632: cx:DI=[sp:DI+0x28] 222: {dx:DI=dx:DI-cx:DI;clobber flags:CC;} ... Please note (insn 594) that uses clobbered SI register, although the call insn clobbers it: (call_insn/i 217 216 218 25 (set (reg:DI 0 ax) (call (mem:QI (symbol_ref:DI ("strlen") [flags 0x41] <function_decl 0x2b7e7ae707e0 strlen>) [0 __builtin_strlen S1 A8]) (const_int 0 [0]))) pr66782.i:96 656 {*call_value} (expr_list:REG_CALL_DECL (symbol_ref:DI ("strlen") [flags 0x41] <function_decl 0x2b7e7ae707e0 strlen>) (expr_list:REG_EH_REGION (const_int 0 [0]) (nil))) (expr_list (clobber (reg:TI 52 xmm15)) (expr_list (clobber (reg:TI 51 xmm14)) (expr_list (clobber (reg:TI 50 xmm13)) (expr_list (clobber (reg:TI 49 xmm12)) (expr_list (clobber (reg:TI 48 xmm11)) (expr_list (clobber (reg:TI 47 xmm10)) (expr_list (clobber (reg:TI 46 xmm9)) (expr_list (clobber (reg:TI 45 xmm8)) (expr_list (clobber (reg:TI 28 xmm7)) (expr_list (clobber (reg:TI 27 xmm6)) (expr_list (clobber (reg:DI 5 di)) (expr_list (clobber (reg:DI 4 si)) (expr_list:DI (use (reg:DI 5 di)) (nil))))))))))))))) Confirmed with latest 6.0 mainline [trunk revision 225533] as RA problem. CC RA expert.