[Bug target/93047] frename-registers does not work well with __builtin_return
guojiufu at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Jan 8 10:13:00 GMT 2020
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.
More information about the Gcc-bugs
mailing list