[Bug target/47449] [32] can’t find a register in class ‘DIREG’ while reloading ‘asm’

hjl.tools at gmail dot com gcc-bugzilla@gcc.gnu.org
Mon Jan 24 23:38:00 GMT 2011


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

--- Comment #5 from H.J. Lu <hjl.tools at gmail dot com> 2011-01-24 23:27:48 UTC ---
Before fwprop1:

---
;; Pred edge  ENTRY [100.0%]  (fallthru)
(note 4 0 2 2 [bb 2] NOTE_INSN_BASIC_BLOCK)

(insn 2 4 3 2 (set (reg/v/f:DI 61 [ trans ])
        (zero_extend:DI (reg:SI 5 di [ trans ]))) x.c:4 115
{*zero_extendsidi2_r
ex64}
     (nil))

(note 3 2 6 2 NOTE_INSN_FUNCTION_BEG)

(insn 6 3 7 2 (parallel [
            (set (reg:SI 62 [ ret ])
                (asm_operands:SI ("negl %0
    ") ("=D") 0 []
                     []
                     [] x.c:9))
            (clobber (reg:QI 18 fpsr))
            (clobber (reg:QI 17 flags))
        ]) x.c:6 -1
     (nil))

(insn 7 6 8 2 (set (reg/v:SI 59 [ ret ])
        (reg:SI 62 [ ret ])) x.c:6 64 {*movsi_internal}
     (nil))

(insn 8 7 9 2 (set (reg:SI 5 di)
        (subreg/s/u:SI (reg/v/f:DI 61 [ trans ]) 0)) x.c:7 64 {*movsi_internal}
     (nil))

(call_insn 9 8 10 2 (call (mem:QI (symbol_ref:DI ("bar") [flags 0x41] 
<function
_decl 0x7fa8a422ef00 bar>) [0 S1 A8])
        (const_int 0 [0])) x.c:7 623 {*call_0}
     (nil)
    (expr_list:REG_DEP_TRUE (use (reg:SI 5 di))
        (nil)))

(insn 10 9 14 2 (set (reg:SI 60 [ <retval> ])
        (reg:SI 62 [ ret ])) x.c:7 64 {*movsi_internal}
     (nil))

(insn 14 10 17 2 (set (reg/i:SI 0 ax)
        (reg:SI 62 [ ret ])) x.c:9 64 {*movsi_internal}
     (nil))

(insn 17 14 0 2 (use (reg/i:SI 0 ax)) x.c:9 -1
     (nil))
;; End of basic block 2 -> ( 1)
;; lr  out      0 [ax] 6 [bp] 7 [sp] 16 [argp] 20 [frame]


;; Succ edge  EXIT [100.0%]  (fallthru)
---

After fwprop1:

---
;; Pred edge  ENTRY [100.0%]  (fallthru)
(note 4 0 3 2 [bb 2] NOTE_INSN_BASIC_BLOCK)

(note 3 4 6 2 NOTE_INSN_FUNCTION_BEG)

(insn 6 3 9 2 (parallel [
            (set (reg:SI 62 [ ret ])
                (asm_operands:SI ("negl %0
    ") ("=D") 0 []
                     []
                     [] x.c:9))
            (clobber (reg:QI 18 fpsr))
            (clobber (reg:QI 17 flags))
        ]) x.c:6 -1
     (expr_list:REG_UNUSED (reg:QI 18 fpsr)
        (expr_list:REG_UNUSED (reg:QI 17 flags)
            (nil))))

(call_insn 9 6 14 2 (call (mem:QI (symbol_ref:DI ("bar") [flags 0x41] 
<function
_decl 0x7fa8a422ef00 bar>) [0 S1 A8])
        (const_int 0 [0])) x.c:7 623 {*call_0}
     (expr_list:REG_DEAD (reg:SI 5 di)
        (nil))
    (expr_list:REG_DEP_TRUE (use (reg:SI 5 di))
        (nil)))

(insn 14 9 17 2 (set (reg/i:SI 0 ax)
        (reg:SI 62 [ ret ])) x.c:9 64 {*movsi_internal}
     (expr_list:REG_DEAD (reg:SI 62 [ ret ])
        (nil)))

(insn 17 14 0 2 (use (reg/i:SI 0 ax)) x.c:9 -1
     (nil))
;; End of basic block 2 -> ( 1)
;; lr  out      0 [ax] 6 [bp] 7 [sp] 16 [argp] 20 [frame]
;; md  out     


;; Succ edge  EXIT [100.0%]  (fallthru)
---

For some reason, fwprop1 doesn't remove

(insn 2 4 3 2 (set (reg/v/f:DI 61 [ trans ])
        (reg:DI 5 di [ trans ])) x.c:4 62 {*movdi_internal_rex64}
     (nil))

for 64bit.



More information about the Gcc-bugs mailing list