From ae3738f4a797263eab7bac04d5e65ef7c23b0ca6 Mon Sep 17 00:00:00 2001 From: Chad Rosier Date: Mon, 17 Nov 2014 15:52:51 +0000 Subject: [PATCH] [Reassociate] Canonicalize constants to RHS operand. 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 | 5 ++++- test/Transforms/Reassociate/canonicalize-neg-const.ll | 6 +++--- test/Transforms/Reassociate/fast-AgressiveSubMove.ll | 4 ++-- test/Transforms/Reassociate/fast-fp-commute.ll | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/Transforms/Scalar/Reassociate.cpp b/lib/Transforms/Scalar/Reassociate.cpp index 30e9b88226b..abe7f28cece 100644 --- a/lib/Transforms/Scalar/Reassociate.cpp +++ b/lib/Transforms/Scalar/Reassociate.cpp @@ -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(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(RHS)) + return; + if (isa(LHS) || RHSRank < LHSRank) cast(I)->swapOperands(); } diff --git a/test/Transforms/Reassociate/canonicalize-neg-const.ll b/test/Transforms/Reassociate/canonicalize-neg-const.ll index 8952675a8cf..e85a963f6dd 100644 --- a/test/Transforms/Reassociate/canonicalize-neg-const.ll +++ b/test/Transforms/Reassociate/canonicalize-neg-const.ll @@ -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 diff --git a/test/Transforms/Reassociate/fast-AgressiveSubMove.ll b/test/Transforms/Reassociate/fast-AgressiveSubMove.ll index 3b74fb6a30c..0c28ed16491 100644 --- a/test/Transforms/Reassociate/fast-AgressiveSubMove.ll +++ b/test/Transforms/Reassociate/fast-AgressiveSubMove.ll @@ -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 diff --git a/test/Transforms/Reassociate/fast-fp-commute.ll b/test/Transforms/Reassociate/fast-fp-commute.ll index 71fe7bb48a0..ad89607a21e 100644 --- a/test/Transforms/Reassociate/fast-fp-commute.ll +++ b/test/Transforms/Reassociate/fast-fp-commute.ll @@ -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 -- 2.34.1