[all-commits] [llvm/llvm-project] 1c21d5: [GlobalISel] Remove GI known bits cache (#157352)
David Green via All-commits
all-commits at lists.llvm.org
Sun Sep 14 23:32:23 PDT 2025
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 1c21d5cb9b8e48ab928919a6f358eba8ffd3b49c
https://github.com/llvm/llvm-project/commit/1c21d5cb9b8e48ab928919a6f358eba8ffd3b49c
Author: David Green <david.green at arm.com>
Date: 2025-09-15 (Mon, 15 Sep 2025)
Changed paths:
M llvm/include/llvm/CodeGen/GlobalISel/GISelValueTracking.h
M llvm/lib/CodeGen/GlobalISel/GISelValueTracking.cpp
M llvm/test/CodeGen/AArch64/rem-by-const.ll
M llvm/test/CodeGen/AMDGPU/GlobalISel/sdiv.i64.ll
M llvm/test/CodeGen/AMDGPU/GlobalISel/srem.i64.ll
M llvm/test/CodeGen/RISCV/GlobalISel/div-by-constant.ll
M llvm/unittests/CodeGen/GlobalISel/KnownBitsTest.cpp
M llvm/unittests/CodeGen/GlobalISel/KnownBitsVectorTest.cpp
Log Message:
-----------
[GlobalISel] Remove GI known bits cache (#157352)
There is a cache on the known-bit computed by global-isel. It only works
inside a single query to computeKnownBits, which limits its usefulness,
and according to the tests can sometimes limit the effectiveness of
known-bits queries. (Although some AMD tests look longer). Keeping the
cache valid and clearing it at the correct times can also require being
careful about the functions called inside known-bits queries.
I measured compile-time of removing it and came up with:
```
7zip 2.06405E+11 2.06436E+11 0.015018992
Bullet 1.01298E+11 1.01186E+11 -0.110236169
ClamAV 57942466667 57848066667 -0.16292023
SPASS 45444466667 45402966667 -0.091320249
consumer 35432466667 35381233333 -0.144594317
kimwitu++ 40858833333 40927933333 0.169118877
lencod 70022366667 69950633333 -0.102443457
mafft 38439900000 38413233333 -0.069372362
sqlite3 35822266667 35770033333 -0.145812474
tramp3d 82083133333 82045600000 -0.045726
Average -0.068828739
```
The last column is % difference between with / without the cache. So in
total it seems to be costing slightly more to keep the current
known-bits cache than if it was removed. (Measured in instruction count,
similar to llvm-compile-time-tracker).
The hit rate wasn't terrible - higher than I expected. In the
llvm-test-suite+external projects it was hit 4791030 times out of
91107008 queries, slightly more than 5%.
Note that as globalisel increases in complexity, more known bits calls
might be made and the numbers might shift. If that is the case it might
be better to have a cache that works across calls, providing it doesn't
make effectiveness worse.
To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications
More information about the All-commits
mailing list