diff options
Diffstat (limited to 'llvm/test/Transforms')
| -rw-r--r-- | llvm/test/Transforms/Reassociate/basictest.ll | 2 | ||||
| -rw-r--r-- | llvm/test/Transforms/Reassociate/canonicalize-neg-const.ll | 110 | ||||
| -rw-r--r-- | llvm/test/Transforms/Reassociate/liftsign.ll | 69 | ||||
| -rw-r--r-- | llvm/test/Transforms/Reassociate/wrap-flags.ll | 6 |
4 files changed, 114 insertions, 73 deletions
diff --git a/llvm/test/Transforms/Reassociate/basictest.ll b/llvm/test/Transforms/Reassociate/basictest.ll index d70bfcbb72c..0194ce2e302 100644 --- a/llvm/test/Transforms/Reassociate/basictest.ll +++ b/llvm/test/Transforms/Reassociate/basictest.ll @@ -203,7 +203,7 @@ define i32 @test14(i32 %X1, i32 %X2) { ; CHECK-LABEL: @test14 ; CHECK-NEXT: sub i32 %X1, %X2 -; CHECK-NEXT: mul i32 %tmp, 47 +; CHECK-NEXT: mul i32 %B2, 47 ; CHECK-NEXT: ret i32 } diff --git a/llvm/test/Transforms/Reassociate/canonicalize-neg-const.ll b/llvm/test/Transforms/Reassociate/canonicalize-neg-const.ll new file mode 100644 index 00000000000..5ac8a1f2694 --- /dev/null +++ b/llvm/test/Transforms/Reassociate/canonicalize-neg-const.ll @@ -0,0 +1,110 @@ +; RUN: opt -reassociate -gvn -S < %s | FileCheck %s + +; (x + 0.1234 * y) * (x + -0.1234 * y) -> (x + 0.1234 * y) * (x - 0.1234 * y) +define double @test1(double %x, double %y) { +; CHECK-LABEL: @test1 +; CHECK-NEXT: fmul double 1.234000e-01, %y +; CHECK-NEXT: fadd double %x, %mul +; CHECK-NEXT: fsub double %x, %mul +; CHECK-NEXT: fmul double %add{{.*}}, %add{{.*}} +; CHECK-NEXT: ret double %mul + + %mul = fmul double 1.234000e-01, %y + %add = fadd double %mul, %x + %mul1 = fmul double -1.234000e-01, %y + %add2 = fadd double %mul1, %x + %mul3 = fmul double %add, %add2 + ret double %mul3 +} + +; (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: fsub double %x, %mul +; CHECK-NEXT: fmul double %add{{.*}}, %add{{.*}} +; CHECK-NEXT: ret double %mul + + %mul = fmul double %y, -1.234000e-01 + %add = fadd double %mul, %x + %mul1 = fmul double %y, -1.234000e-01 + %add2 = fadd double %mul1, %x + %mul3 = fmul double %add, %add2 + ret double %mul3 +} + +; (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: fadd double %x, %mul +; CHECK-NEXT: fmul double %add{{.*}}, %add{{.*}} +; CHECK-NEXT: ret double + + %mul = fmul double %y, 1.234000e-01 + %add = fadd double %mul, %x + %mul1 = fmul double %y, -1.234000e-01 + %add2 = fsub double %x, %mul1 + %mul3 = fmul double %add, %add2 + ret double %mul3 +} + +; Canonicalize (x - -1234 * y) +define i64 @test4(i64 %x, i64 %y) { +; CHECK-LABEL: @test4 +; CHECK-NEXT: mul i64 %y, 1234 +; CHECK-NEXT: add i64 %mul, %x +; CHECK-NEXT: ret i64 %sub + + %mul = mul i64 %y, -1234 + %sub = sub i64 %x, %mul + ret i64 %sub +} + +; Canonicalize (x - -0.1234 * y) +define double @test5(double %x, double %y) { +; CHECK-LABEL: @test5 +; CHECK-NEXT: fmul double 1.234000e-01, %y +; CHECK-NEXT: fadd double %x, %mul +; CHECK-NEXT: ret double + + %mul = fmul double -1.234000e-01, %y + %sub = fsub double %x, %mul + ret double %sub +} + +; Don't modify (-0.1234 * y - x) +define double @test6(double %x, double %y) { +; CHECK-LABEL: @test6 +; CHECK-NEXT: fmul double -1.234000e-01, %y +; CHECK-NEXT: fsub double %mul, %x +; CHECK-NEXT: ret double %sub + + %mul = fmul double -1.234000e-01, %y + %sub = fsub double %mul, %x + ret double %sub +} + +; Canonicalize (-0.1234 * y + x) -> (x - 0.1234 * y) +define double @test7(double %x, double %y) { +; CHECK-LABEL: @test7 +; CHECK-NEXT: fmul double 1.234000e-01, %y +; CHECK-NEXT: fsub double %x, %mul +; CHECK-NEXT: ret double %add + + %mul = fmul double -1.234000e-01, %y + %add = fadd double %mul, %x + ret double %add +} + +; 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: fsub double %x, %mul +; CHECK-NEXT: ret double %add + + %mul = fmul double %y, -1.234000e-01 + %add = fadd double %mul, %x + ret double %add +} diff --git a/llvm/test/Transforms/Reassociate/liftsign.ll b/llvm/test/Transforms/Reassociate/liftsign.ll deleted file mode 100644 index e8b728cba24..00000000000 --- a/llvm/test/Transforms/Reassociate/liftsign.ll +++ /dev/null @@ -1,69 +0,0 @@ -; RUN: opt -reassociate -gvn -S < %s | FileCheck %s - -; (x + 0.1234 * y) * (x + -0.1234 * y) -> (x + 0.1234 * y) * (x - 0.1234 * y) -; so CSE can simplify it further -define double @lift_sign1(double %x, double %y) nounwind readnone ssp uwtable { -; CHECK-LABEL: @lift_sign1( - %mul = fmul double 1.234000e-01, %y - %add = fadd double %mul, %x - %mul1 = fmul double -1.234000e-01, %y - %add2 = fadd double %mul1, %x - %mul3 = fmul double %add, %add2 -; CHECK-NOT: %mul1 = fmul double -1.234000e-01, %y -; CHECK-NOT: %add2 = fadd %mul1, %x -; CHECK: %add2.repl = fsub double %x, %mul -; CHECK: %mul3 = fmul double %add, %add2 -ret double %mul3 -} - -; (x + -0.1234 * y) * (x + -0.1234 * y) -> (x - 0.1234 * y) * (x - 0.1234 * y) -; GVN can then rewrite it even further -define double @lift_sign2(double %x, double %y) nounwind readnone ssp uwtable { -; CHECK-LABEL: @lift_sign2( - %mul = fmul double %y, -1.234000e-01 - %add = fadd double %mul, %x - %mul1 = fmul double %y, -1.234000e-01 - %add2 = fadd double %mul1, %x - %mul3 = fmul double %add, %add2 -; CHECK-NOT: %mul = fmul double %y, -1.234000e-01 -; CHECK-NOT: %add = fadd double %mul, %x -; CHECK-NOT: %mul1 = fmul double %y, -1.234000e-01 -; CHECK-NOT: %add2 = fadd double %mul1, %x -; CHECK-NOT: %mul3 = fmul double %add, %add2 -; CHECK: %mul = fmul double 1.234000e-01, %y -; CHECK: %add.repl = fsub double %x, %mul -; CHECK: %mul3 = fmul double %add.repl, %add.repl - ret double %mul3 -} - -; (x + 0.1234 * y) * (x - -0.1234 * y) -> (x + 0.1234 * y) * (x + 0.1234 * y) -define double @lift_sign3(double %x, double %y) nounwind readnone ssp uwtable { -; CHECK-LABEL: @lift_sign3( - %mul = fmul double %y, 1.234000e-01 - %add = fadd double %mul, %x - %mul1 = fmul double %y, -1.234000e-01 - %add2 = fsub double %x, %mul1 - %mul3 = fmul double %add, %add2 -; CHECK-NOT: %mul1 = fmul double %y, -1.234000e-01 -; CHECK-NOT: %add2 = fsub double %x, %mul1 -; CHECK-NOT: %mul3 = fmul double %add, %add2 -; CHECK: %mul3 = fmul double %add, %add - ret double %mul3 -} - -; (x + 0.1234 / y) * (x + -0.1234 / y) -> (x + 0.1234 / y) * (x - 0.1234 / y) -; so CSE can simplify it further -define double @lift_sign4(double %x, double %y) nounwind readnone ssp uwtable { -; CHECK-LABEL: @lift_sign4( - %div = fdiv double 1.234000e-01, %y - %add = fadd double %div, %x - %div1 = fdiv double -1.234000e-01, %y - %add2 = fadd double %div1, %x - %mul3 = fmul double %add, %add2 -; CHECK-NOT: %div1 = fdiv double -1.234000e-01, %y -; CHECK-NOT: %add2 = fadd double %div1, %x -; CHECK-NOT: %mul3 = fmul double %add, %add2 -; CHECK: %add2.repl = fsub double %x, %div -; CHECK: %mul3 = fmul double %add, %add2.repl - ret double %mul3 -} diff --git a/llvm/test/Transforms/Reassociate/wrap-flags.ll b/llvm/test/Transforms/Reassociate/wrap-flags.ll index 7483acd02e5..e3304b6a7bb 100644 --- a/llvm/test/Transforms/Reassociate/wrap-flags.ll +++ b/llvm/test/Transforms/Reassociate/wrap-flags.ll @@ -5,7 +5,7 @@ ; CHECK-LABEL: @shl_to_mul_nsw( ; CHECK: %mul = mul i32 %i, -2147483648 -; CHECK: %mul2 = add i32 %mul, 1 +; CHECK: add i32 %mul, 1 define i32 @shl_to_mul_nsw(i32 %i) { entry: %mul = shl nsw i32 %i, 31 @@ -15,7 +15,7 @@ entry: ; CHECK-LABEL: @shl_to_mul_nuw( ; CHECK: %mul = mul nuw i32 %i, 4 -; CHECK: %mul2 = add i32 %mul, 1 +; CHECK: add i32 %mul, 1 define i32 @shl_to_mul_nuw(i32 %i) { entry: %mul = shl nuw i32 %i, 2 @@ -25,7 +25,7 @@ entry: ; CHECK-LABEL: @shl_to_mul_nuw_nsw( ; CHECK: %mul = mul nuw nsw i32 %i, 4 -; CHECK: %mul2 = add i32 %mul, 1 +; CHECK: add i32 %mul, 1 define i32 @shl_to_mul_nuw_nsw(i32 %i) { entry: %mul = shl nuw nsw i32 %i, 2 |

