[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