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 target/79185] [5/6/7 Regression] register allocation in the addition of two 128 bit ints


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

--- Comment #8 from Bernd Schmidt <bernds at gcc dot gnu.org> ---
Created attachment 40997
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=40997&action=edit
Some steps towards solving it

There are some relatively obvious issues in ira-lives:
a) We briefly mark a register as live for a plain CLOBBER pattern
b) For a subword SET, DF gives us an extra use of the whole register, which
messes up our conflict graph as well if we handle it like any other use. It
seems safe to ignore it.

Unfortunately, this doesn't solve the issue - the conflicts are reduced, but it
seems that r88 isn't involved in copies from hard regs, and so when we pop it
first, we choose a random unused register. Maybe that's something Vlad could
figure out more quickly. What's worse, I've seen cases where the additional
freedom (fewer conflicts, more copies detected) leads to worse results.

Also, limiting lifetimes can have the effect of sometimes detecting that an
object does not really live at any point. I've tweaked things somewhat, but a
few testsuite failures still remain.

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