aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-diff/lib/DifferenceEngine.cpp
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2025-11-03 16:03:54 +0000
committerGitHub <noreply@github.com>2025-11-03 16:03:54 +0000
commit5b7a5f7c5f3c1dcd8ea9debf56983b85e393bc86 (patch)
tree3f9c31e1a89ebcb602469a1e2d05932a0518ce2d /llvm/tools/llvm-diff/lib/DifferenceEngine.cpp
parent7d5659083cb21722416b38fe92b7200fe89be232 (diff)
downloadllvm-5b7a5f7c5f3c1dcd8ea9debf56983b85e393bc86.zip
llvm-5b7a5f7c5f3c1dcd8ea9debf56983b85e393bc86.tar.gz
llvm-5b7a5f7c5f3c1dcd8ea9debf56983b85e393bc86.tar.bz2
[X86] Narrow BT/BTC/BTR/BTS compare + RMW patterns on very large integers (REAPPLIED) (#166176)
This patch allows us to narrow single bit-test/twiddle operations for larger than legal scalar integers to efficiently operate just on the i32 sub-integer block actually affected. The BITOP(X,SHL(1,IDX)) patterns are split, with the IDX used to access the specific i32 block as well as specific bit within that block. BT comparisons are relatively simple, and builds on the truncated shifted loads fold from #165266. BTC/BTR/BTS bit twiddling patterns need to match the entire RMW pattern to safely confirm only one block is affected, but a similar approach is taken and creates codegen that should allow us to further merge with matching BT opcodes in a future patch (see #165291). The resulting codegen is notably more efficient than the heavily micro-coded memory folded variants of BT/BTC/BTR/BTS. There is still some work to improve the bit insert 'init' patterns included in bittest-big-integer.ll but I'm expecting this to be a straightforward future extension. REAPPLIED from #165540 which was reverted due to a sanitizer regression that should have been fixed by #166160 Fixes #164225
Diffstat (limited to 'llvm/tools/llvm-diff/lib/DifferenceEngine.cpp')
0 files changed, 0 insertions, 0 deletions