aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/Object/BuildIDTest.cpp
diff options
context:
space:
mode:
authorLuke Lau <luke@igalia.com>2025-10-04 18:50:44 -0400
committerGitHub <noreply@github.com>2025-10-04 22:50:44 +0000
commit795a115d1919966df72079eb3bd82699bfb2fa58 (patch)
tree9fa3f529fbce3dfddcfd0aee52e90649b518980e /llvm/unittests/Object/BuildIDTest.cpp
parent24c1bb60e321c16cb8247b45b080b2d5e02a2b31 (diff)
downloadllvm-795a115d1919966df72079eb3bd82699bfb2fa58.zip
llvm-795a115d1919966df72079eb3bd82699bfb2fa58.tar.gz
llvm-795a115d1919966df72079eb3bd82699bfb2fa58.tar.bz2
[RegAlloc] Remove default restriction on non-trivial rematerialization (#159211)
In the register allocator we define non-trivial rematerialization as the rematerlization of an instruction with virtual register uses. We have been able to perform non-trivial rematerialization for a while, but it has been prevented by default unless specifically overriden by the target in `TargetTransformInfo::isReMaterializableImpl`. The original reasoning for this given by the comment in the default implementation is because we might increase a live range of the virtual register, but we don't actually do this. LiveRangeEdit::allUsesAvailableAt makes sure that we only rematerialize instructions whose virtual registers are already live at the use sites. https://reviews.llvm.org/D106408 had originally tried to remove this restriction but it was reverted after some performance regressions were reported. We think it is likely that the regressions were caused by the fact that the old isTriviallyReMaterializable API sometimes returned true for non-trivial rematerializations. However https://github.com/llvm/llvm-project/pull/160377 recently split the API out into a separate non-trivial and trivial version and updated the call-sites accordingly, and https://github.com/llvm/llvm-project/pull/160709 and #159180 fixed heuristics which weren't accounting for the difference between non-trivial and trivial. With these fixes in place, this patch proposes to again allow non-trivial rematerialization by default which reduces a significant amount of spills and reloads across various targets. For llvm-test-suite built with -O3 -flto, we get the following geomean reduction in reloads: - arm64-apple-darwin: 11.6% - riscv64-linux-gnu: 8.1% - x86_64-linux-gnu: 6.5%
Diffstat (limited to 'llvm/unittests/Object/BuildIDTest.cpp')
0 files changed, 0 insertions, 0 deletions