[PATCH] InstCombineCompare with constant return false if we know it is never going to be equal

David Majnemer david.majnemer at gmail.com
Thu May 22 13:11:30 PDT 2014


================
Comment at: lib/Transforms/InstCombine/InstCombineCompares.cpp:2445
@@ +2444,3 @@
+    const APInt *AP1;
+    if (I.getPredicate() == ICmpInst::ICMP_EQ && match(Op1, m_APInt(AP1)) &&
+        CI->isOne()) {
----------------
What about the `ICmpInst::ICMP_NE` case? We should be able to handle this case just as well.

Can we optimize any of the other predicates?

================
Comment at: lib/Transforms/InstCombine/InstCombineCompares.cpp:2451
@@ +2450,3 @@
+      if (Op0KnownZero.countTrailingOnes() >= 1)
+        return ReplaceInstUsesWith(I, ConstantInt::getFalse(I.getType()));
+    }
----------------
If you always transform to true or false, you should probably move this to InstSimplify.

http://reviews.llvm.org/D3868






More information about the llvm-commits mailing list