[Bug rtl-optimization/66782] [5/6 Regression] Unable to run 64-bit wine after MS->SYSV register changes
ubizjak at gmail dot com
gcc-bugzilla@gcc.gnu.org
Wed Jul 8 08:11:00 GMT 2015
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.
More information about the Gcc-bugs
mailing list