problem with flow and caller_save
Jeffrey A Law
law@cygnus.com
Wed Oct 28 10:25:00 GMT 1998
In message < 199810280658.GAA00722@htbrug.net.HCC.nl >you write:
> (insn 10 7 13 (set (subreg:QI (reg/v:HI 37) 0)
> (mem/u:QI (symbol_ref/u:QI ("*LC4")) 0)) 5 {movqi_noclobber} (nil)
> (nil))
>
> (insn 13 10 16 (set (subreg:QI (reg/v:HI 37) 1)
> (const_int 21845)) 5 {movqi_noclobber} (insn_list 10 (nil))
> (nil))
>
> This will call __main and load pseudo_reg 37 (long long) with a value.
> The flowanalyses will now mark reg 37 as a caller_save reg in
> propagate_block at line 1886 (REG_N_CALLS_CROSSED (i)++;). This is
> because it does not detect correctly that reg 37 becomes life after the call
> to __main.
> Now global alloc assigns a caller save register (r0,r1) to reg 37. The code
> now looks like:
Emit a clobber of reg37 before insn 10.
jeff
More information about the Gcc-bugs
mailing list