[PATCH] D38195: [InstCombine] Move an optimization from foldICmpAndConstConst to foldICmpUsingKnownBits
Craig Topper via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 25 05:04:02 PDT 2017
craig.topper updated this revision to Diff 116414.
craig.topper added a comment.
Forgot to add full context
https://reviews.llvm.org/D38195
Files:
lib/Transforms/InstCombine/InstCombineCompares.cpp
Index: lib/Transforms/InstCombine/InstCombineCompares.cpp
===================================================================
--- lib/Transforms/InstCombine/InstCombineCompares.cpp
+++ lib/Transforms/InstCombine/InstCombineCompares.cpp
@@ -1714,22 +1714,6 @@
}
}
- // (X & C2) > C1 --> (X & C2) != 0, if any bit set in (X & C2) will produce a
- // result greater than C1. Also handle (X & C2) < C1 --> (X & C2) == 0.
- if (!C2->isNullValue()) {
- unsigned NumTZ = C2->countTrailingZeros();
- if (Cmp.getPredicate() == ICmpInst::ICMP_UGT &&
- NumTZ >= C1->getActiveBits()) {
- Constant *Zero = Constant::getNullValue(And->getType());
- return new ICmpInst(ICmpInst::ICMP_NE, And, Zero);
- }
- if (Cmp.getPredicate() == ICmpInst::ICMP_ULT &&
- NumTZ >= C1->ceilLogBase2()) {
- Constant *Zero = Constant::getNullValue(And->getType());
- return new ICmpInst(ICmpInst::ICMP_EQ, And, Zero);
- }
- }
-
return nullptr;
}
@@ -4221,6 +4205,11 @@
if (Op1Min == Op0Min + 1)
return new ICmpInst(ICmpInst::ICMP_EQ, Op0,
ConstantInt::get(Op0->getType(), Op1Min - 1));
+ // X <u C --> X == 0, if the number of zero bits in the bottom of X
+ // exceeds the log2 of C.
+ if (Op0Known.countMinTrailingZeros() >= Op1Min.ceilLogBase2())
+ return new ICmpInst(ICmpInst::ICMP_EQ, Op0,
+ Constant::getNullValue(Op1->getType()));
}
break;
}
@@ -4237,6 +4226,11 @@
if (Op1Min == Op0Max - 1)
return new ICmpInst(ICmpInst::ICMP_EQ, Op0,
ConstantInt::get(Op1->getType(), Op1Min + 1));
+ // X >u C --> X != 0, if the number of zero bits in the bottom of X
+ // exceeds the log2 of C.
+ if (Op0Known.countMinTrailingZeros() >= Op1Min.getActiveBits())
+ return new ICmpInst(ICmpInst::ICMP_NE, Op0,
+ Constant::getNullValue(Op1->getType()));
}
break;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D38195.116414.patch
Type: text/x-patch
Size: 2002 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170925/21ec456f/attachment.bin>
More information about the llvm-commits
mailing list