]> granicus.if.org Git - llvm/commitdiff
[InstCombine] replace unnecessary fcmp fold with assert
authorSanjay Patel <spatel@rotateright.com>
Sat, 2 Sep 2017 18:10:29 +0000 (18:10 +0000)
committerSanjay Patel <spatel@rotateright.com>
Sat, 2 Sep 2017 18:10:29 +0000 (18:10 +0000)
See https://reviews.llvm.org/rL312411 for related InstSimplify tests.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@312421 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/InstCombine/InstCombineAndOrXor.cpp

index afc84fc939c019340d29d05e02f5435ece0b6a65..006ed418c733100ac91010e4f04a92bcb7c65fb0 100644 (file)
@@ -941,12 +941,9 @@ Value *InstCombiner::foldLogicOfFCmps(FCmpInst *LHS, FCmpInst *RHS, bool IsAnd)
     auto *LHSC = dyn_cast<ConstantFP>(LHS1);
     auto *RHSC = dyn_cast<ConstantFP>(RHS1);
     if (LHSC && RHSC) {
-      // If either of the constants are nans, then the whole thing returns
-      // true or false.
-      if (LHSC->getValueAPF().isNaN() || RHSC->getValueAPF().isNaN())
-        return IsAnd ? Builder.getFalse() : Builder.getTrue();
-
-      // Otherwise, no need to compare the two constants. Compare the rest:
+      assert(!LHSC->getValueAPF().isNaN() && !RHSC->getValueAPF().isNaN() &&
+             "Failed to simplify fcmp ord/uno with NAN operand");
+      // Ignore the constants because they can't be NANs:
       // (fcmp ord x, c) & (fcmp ord y, c)  -> (fcmp ord x, y)
       // (fcmp uno x, c) & (fcmp uno y, c)  -> (fcmp uno x, y)
       return Builder.CreateFCmp(PredL, LHS0, RHS0);