InstCombine: Fix transform to use the swapped predicate.
authorBenjamin Kramer <benny.kra@googlemail.com>
Thu, 31 Mar 2011 10:46:03 +0000 (10:46 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Thu, 31 Mar 2011 10:46:03 +0000 (10:46 +0000)
Thanks Frits!

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

lib/Transforms/InstCombine/InstCombineCompares.cpp
test/Transforms/InstCombine/fcmp.ll

index cb434bda57a80fc021b6a77893df03ad6f45be48..3e549d942823561ccd47613762d62e23682e2f54 100644 (file)
@@ -2855,10 +2855,10 @@ Instruction *InstCombiner::visitFCmpInst(FCmpInst &I) {
       }
   }
 
-  // fcmp (fneg x), (fneg y) -> fcmp x, y
+  // fcmp pred (fneg x), (fneg y) -> fcmp swap(pred) x, y
   Value *X, *Y;
   if (match(Op0, m_FNeg(m_Value(X))) && match(Op1, m_FNeg(m_Value(Y))))
-    return new FCmpInst(I.getPredicate(), X, Y);
+    return new FCmpInst(I.getSwappedPredicate(), X, Y);
 
   // fcmp (fpext x), (fpext y) -> fcmp x, y
   if (FPExtInst *LHSExt = dyn_cast<FPExtInst>(Op0))
index 66607ea0017c4d273a6fffa191f95962a21099ac..b41cdfa7cf16be78c490afe9c3d882c4d41bde79 100644 (file)
@@ -44,7 +44,7 @@ define i1 @test5(float %a) nounwind {
 define i1 @test6(float %x, float %y) nounwind {
   %neg1 = fsub float -0.000000e+00, %x
   %neg2 = fsub float -0.000000e+00, %y
-  %cmp = fcmp ogt float %neg1, %neg2
+  %cmp = fcmp olt float %neg1, %neg2
   ret i1 %cmp
 ; CHECK: @test6
 ; CHECK-NEXT: fcmp ogt float %x, %y