[Reassociate] Canonicalize constants to RHS operand.
authorChad Rosier <mcrosier@codeaurora.org>
Mon, 17 Nov 2014 15:52:51 +0000 (15:52 +0000)
committerChad Rosier <mcrosier@codeaurora.org>
Mon, 17 Nov 2014 15:52:51 +0000 (15:52 +0000)
Fix a thinko where the RHS was already a constant.

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

lib/Transforms/Scalar/Reassociate.cpp
test/Transforms/Reassociate/canonicalize-neg-const.ll
test/Transforms/Reassociate/fast-AgressiveSubMove.ll
test/Transforms/Reassociate/fast-fp-commute.ll

index 30e9b88226bcce598c1fe1a0af6ab561d9d66bd5..abe7f28cece5bf2dcc4484015d0e52984e392267 100644 (file)
@@ -332,6 +332,7 @@ unsigned Reassociate::getRank(Value *V) {
   return ValueRankMap[I] = Rank;
 }
 
+// Canonicalize constants to RHS.  Otherwise, sort the operands by rank.
 void Reassociate::canonicalizeOperands(Instruction *I) {
   assert(isa<BinaryOperator>(I) && "Expected binary operator.");
   assert(I->isCommutative() && "Expected commutative operator.");
@@ -341,7 +342,9 @@ void Reassociate::canonicalizeOperands(Instruction *I) {
   unsigned LHSRank = getRank(LHS);
   unsigned RHSRank = getRank(RHS);
 
-  // Canonicalize constants to RHS.  Otherwise, sort the operands by rank.
+  if (isa<Constant>(RHS))
+    return;
+
   if (isa<Constant>(LHS) || RHSRank < LHSRank)
     cast<BinaryOperator>(I)->swapOperands();
 }
index 8952675a8cf0bfc1c4f36f75dd34bb9e66e1141a..e85a963f6ddac32b54f90029703b324cad33c8de 100644 (file)
@@ -20,7 +20,7 @@ define double @test1(double %x, double %y) {
 ; (x + -0.1234 * y) * (x + -0.1234 * y) -> (x - 0.1234 * y) * (x - 0.1234 * y)
 define double @test2(double %x, double %y) {
 ; CHECK-LABEL: @test2
-; CHECK-NEXT: fmul double 1.234000e-01, %y
+; CHECK-NEXT: fmul double %y, 1.234000e-01
 ; CHECK-NEXT: fsub double %x, %mul
 ; CHECK-NEXT: fmul double %add{{.*}}, %add{{.*}}
 ; CHECK-NEXT: ret double %mul
@@ -36,7 +36,7 @@ define double @test2(double %x, double %y) {
 ; (x + 0.1234 * y) * (x - -0.1234 * y) -> (x + 0.1234 * y) * (x + 0.1234 * y)
 define double @test3(double %x, double %y) {
 ; CHECK-LABEL: @test3
-; CHECK-NEXT: fmul double 1.234000e-01, %y
+; CHECK-NEXT: fmul double %y, 1.234000e-01
 ; CHECK-NEXT: fadd double %x, %mul
 ; CHECK-NEXT: fmul double %add{{.*}}, %add{{.*}}
 ; CHECK-NEXT: ret double
@@ -100,7 +100,7 @@ define double @test7(double %x, double %y) {
 ; Canonicalize (y * -0.1234 + x) -> (x - 0.1234 * y)
 define double @test8(double %x, double %y) {
 ; CHECK-LABEL: @test8
-; CHECK-NEXT: fmul double 1.234000e-01, %y
+; CHECK-NEXT: fmul double %y, 1.234000e-01
 ; CHECK-NEXT: fsub double %x, %mul
 ; CHECK-NEXT: ret double %add
 
index 3b74fb6a30c0cc3684baa55cd44791746bad9dc7..0c28ed164910f19e45c7139fdff10d3f0e529dff 100644 (file)
@@ -2,8 +2,8 @@
 
 define float @test1(float %A) {
 ; CHECK-LABEL: test1
-; CHECK-NEXT: %X = fadd float 1.000000e+00, %A
-; CHECK-NEXT: %Y = fadd float 1.000000e+00, %A
+; CHECK-NEXT: %X = fadd float %A, 1.000000e+00
+; CHECK-NEXT: %Y = fadd float %A, 1.000000e+00
 ; CHECK-NEXT: %r = fsub float %X, %Y
 ; CHECK-NEXT: ret float %r
 
index 71fe7bb48a03d5846449cc0211a8eaef8ed8a61d..ad89607a21e4db0fc696f659cb749753766e65ff 100644 (file)
@@ -33,7 +33,7 @@ define float @test2(float %x, float %y) {
 
 define float @test3(float %x, float %y) {
 ; CHECK-LABEL: test3
-; CHECK-NEXT: %factor = fmul fast float 2.000000e+00, %y
+; CHECK-NEXT: %factor = fmul fast float %y, 2.000000e+00
 ; CHECK-NEXT: %tmp1 = fmul fast float %factor, %x
 ; CHECK-NEXT: ret float %tmp1