This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug rtl-optimization/54133] regrename introduces additional dependencies


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54133

--- Comment #5 from amker.cheng <amker.cheng at gmail dot com> 2012-08-01 13:48:50 UTC ---
Thanks for your patch, IMHO, I don't think the problem could be fixed in this
way, because:
1. 
   78 r177:DF=r0:DF
   80 [sp:SI]=r166:DF
   81 [sp:SI+0x8]=r168:DF
   82 [sp:SI+0x10]=r170:DF
   84 r2:DF=r164:DF
   85 r0:DF=call [`bar'] argc:0x18
      REG_DEAD: r2:DF
      REG_UNUSED: r0:DF
   86 [sp:SI]=r167:DF
   87 [sp:SI+0x8]=r169:DF
   88 [sp:SI+0x10]=r171:DF
   89 r0:DF=r177:DF
      REG_DEAD: r177:DF
   90 r2:DF=r165:DF
   91 r0:DF=call [`bar'] argc:0x18

The propagation actually increases register pressure from insn 78 to insn 85,
since r177 and r0 are both alive now.
Maybe IRA makes a better decision in this case by spilling r177, I double the
common results.

2.The reported case is some kind of special with all related insns limited in
one basic block. In other cases like described in comment 2, the saving of hard
register is in prologue, so the propagation crosses basic blocks.

Anyway, one thing is clear that the problem is closely connected with
parameter/return register moving.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]