There is a known bug where the register coalescer fails to merge
subranges when multiple ranges end up in the "overflow" bit 32 of the
lanemasks. A proper fix for this is complicated so for now this is a
workaround which lets the register coalescer drop the subregister
liveness information (we just loose some precision by that) and
continue.
Details
- Reviewers
qcolombet
Diff Detail
- Repository
- rL LLVM
Event Timeline
Hi Matthias,
The change looks good, just a few nitpicks.
Any chance we could get a testcase with that, or R600 does not expose it?
Thanks,
-Quentin
lib/CodeGen/RegisterCoalescer.cpp | ||
---|---|---|
163 | Add a comment on what this function returns. | |
168 | Ditto. | |
2398 | Please update the comment before that condition to explain that we currently do not handle the overflow bit. | |
2539 | Says that this is a limitation of the current implement instead of this shouldn’t happen, since it does happen :). | |
2544 | Add a message in the assert, e.g., this situation should happen only for the overflow bit. |
+llvm-commits this time
Unfortunately this is only exposed if you have a subregister index which produces lanemasks with more than 31bits. None of the targets in trunk gets close to that.
- Matthias
Thanks Matthias for the update.
Please land the patch whenever you’ve made the changes for the nitpicks.
Cheers,
-Quentin
Add a comment on what this function returns.