https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93047

--- Comment #4 from Jiu Fu Guo <guojiufu at gcc dot gnu.org> ---
Checking dumps, some info like below:

Before rnreg, there are insns:
127: call [`foo'] argc 0
242: %0:DI=%31:DI+0x220
128: [%31:DI+0x200]=%3:DI
359: %2:TI=%2:TI<-<0x40
449: %3:DI=%0:DI
360: [%3:DI]=%2:TI<-<0x40
391: %2:TI=[%3:DI]<-<0x40

1. During rnreg, two chains "242--449" and "449--360--391" are tied, since
"449:" is just a reg move. 
And rnreg selects the dest reg(%3:DI) of "449" as regno of the tied chain. 

2. While actually, %3:DI is used at "128:", and set by "127: call [`foo'] argc
0". "127--128" overlap with "242--449".

3. __builtin_apply generates "127: call [`foo'] argc 0".  this insn does not
set "return register".
   For a normal function call "int r = foo ();",  "127: %3:DI=call [`foo'] argc
0 may be generated.

Reply via email to