[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