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.