aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/IR/ConstantsTest.cpp
diff options
context:
space:
mode:
authorJessica Paquette <jpaquette@apple.com>2020-08-06 10:40:46 -0700
committerJessica Paquette <jpaquette@apple.com>2020-08-19 10:20:57 -0700
commitd25b12bdc307264e353f1a3c4ccd65c0b45b2f86 (patch)
tree509a78ee63b05af6706688e406b4a15ad0e693c4 /llvm/unittests/IR/ConstantsTest.cpp
parentbcaa806a4747595116b538e8b75b12966e6607f6 (diff)
downloadllvm-d25b12bdc307264e353f1a3c4ccd65c0b45b2f86.zip
llvm-d25b12bdc307264e353f1a3c4ccd65c0b45b2f86.tar.gz
llvm-d25b12bdc307264e353f1a3c4ccd65c0b45b2f86.tar.bz2
[GlobalISel] Add combine for (x & mask) -> x when (x & mask) == x
If we have a mask, and a value x, where (x & mask) == x, we can drop the AND and just use x. This is about a 0.4% geomean code size improvement on CTMark at -O3 for AArch64. In AArch64, this is most useful post-legalization. Patterns like this often show up when legalizing s1s, which must be extended to larger types. e.g. ``` %cmp:_(s32) = G_ICMP ... %and:_(s32) = G_AND %cmp, 1 ``` Since G_ICMP only produces a single bit, there's no reason to mask it with the G_AND. Differential Revision: https://reviews.llvm.org/D85463
Diffstat (limited to 'llvm/unittests/IR/ConstantsTest.cpp')
0 files changed, 0 insertions, 0 deletions