[llvm] d01e0c8 - [NFC] Precommit tests for D109954

Dávid Bolvanský via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 17 12:59:42 PDT 2021


Author: Dávid Bolvanský
Date: 2021-09-17T21:59:35+02:00
New Revision: d01e0c8c66bb88fa40d350df00dce36f65bc1e5d

URL: https://github.com/llvm/llvm-project/commit/d01e0c8c66bb88fa40d350df00dce36f65bc1e5d
DIFF: https://github.com/llvm/llvm-project/commit/d01e0c8c66bb88fa40d350df00dce36f65bc1e5d.diff

LOG: [NFC] Precommit tests for D109954

Added: 
    

Modified: 
    llvm/test/Transforms/InstCombine/powi.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstCombine/powi.ll b/llvm/test/Transforms/InstCombine/powi.ll
index a8b492d28b9e..36f75a0020f7 100644
--- a/llvm/test/Transforms/InstCombine/powi.ll
+++ b/llvm/test/Transforms/InstCombine/powi.ll
@@ -2,8 +2,10 @@
 ; RUN: opt -instcombine -S < %s | FileCheck %s
 
 declare double @llvm.powi.f64.i32(double, i32)
+declare double @llvm.powi.f64.i64(double, i64)
 declare double @llvm.fabs.f64(double)
 declare double @llvm.copysign.f64(double, double)
+declare void @use(double)
 
 define double @powi_fneg_even_int(double %x) {
 ; CHECK-LABEL: @powi_fneg_even_int(
@@ -79,3 +81,183 @@ entry:
   %r = tail call double @llvm.powi.f64.i32(double %cs, i32 5)
   ret double %r
 }
+
+define double @powi_fmul_arg0_no_reassoc(double %x, i32 %i) {
+; CHECK-LABEL: @powi_fmul_arg0_no_reassoc(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[POW:%.*]] = tail call double @llvm.powi.f64.i32(double [[X:%.*]], i32 [[I:%.*]])
+; CHECK-NEXT:    [[MUL:%.*]] = fmul double [[POW]], [[X]]
+; CHECK-NEXT:    ret double [[MUL]]
+;
+entry:
+  %pow = tail call double @llvm.powi.f64.i32(double %x, i32 %i)
+  %mul = fmul double %pow, %x
+  ret double %mul
+}
+
+
+define double @powi_fmul_arg0(double %x, i32 %i) {
+; CHECK-LABEL: @powi_fmul_arg0(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[POW:%.*]] = tail call double @llvm.powi.f64.i32(double [[X:%.*]], i32 [[I:%.*]])
+; CHECK-NEXT:    [[MUL:%.*]] = fmul reassoc double [[POW]], [[X]]
+; CHECK-NEXT:    ret double [[MUL]]
+;
+entry:
+  %pow = tail call double @llvm.powi.f64.i32(double %x, i32 %i)
+  %mul = fmul reassoc double %pow, %x
+  ret double %mul
+}
+
+define double @powi_fmul_arg0_use(double %x, i32 %i) {
+; CHECK-LABEL: @powi_fmul_arg0_use(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[POW:%.*]] = tail call double @llvm.powi.f64.i32(double [[X:%.*]], i32 [[I:%.*]])
+; CHECK-NEXT:    tail call void @use(double [[POW]])
+; CHECK-NEXT:    [[MUL:%.*]] = fmul reassoc double [[POW]], [[X]]
+; CHECK-NEXT:    ret double [[MUL]]
+;
+entry:
+  %pow = tail call double @llvm.powi.f64.i32(double %x, i32 %i)
+  tail call void @use(double %pow)
+  %mul = fmul reassoc double %pow, %x
+  ret double %mul
+}
+
+define double @powi_fmul_powi_no_reassoc(double %x, i32 %y, i32 %z) {
+; CHECK-LABEL: @powi_fmul_powi_no_reassoc(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[P1:%.*]] = tail call double @llvm.powi.f64.i32(double [[X:%.*]], i32 [[Y:%.*]])
+; CHECK-NEXT:    [[P2:%.*]] = tail call double @llvm.powi.f64.i32(double [[X]], i32 [[Z:%.*]])
+; CHECK-NEXT:    [[MUL:%.*]] = fmul double [[P2]], [[P1]]
+; CHECK-NEXT:    ret double [[MUL]]
+;
+entry:
+  %p1 = tail call double @llvm.powi.f64.i32(double %x, i32 %y)
+  %p2 = tail call double @llvm.powi.f64.i32(double %x, i32 %z)
+  %mul = fmul double %p2, %p1
+  ret double %mul
+}
+
+
+define double @powi_fmul_powi(double %x, i32 %y, i32 %z) {
+; CHECK-LABEL: @powi_fmul_powi(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[P1:%.*]] = tail call double @llvm.powi.f64.i32(double [[X:%.*]], i32 [[Y:%.*]])
+; CHECK-NEXT:    [[P2:%.*]] = tail call double @llvm.powi.f64.i32(double [[X]], i32 [[Z:%.*]])
+; CHECK-NEXT:    [[MUL:%.*]] = fmul reassoc double [[P2]], [[P1]]
+; CHECK-NEXT:    ret double [[MUL]]
+;
+entry:
+  %p1 = tail call double @llvm.powi.f64.i32(double %x, i32 %y)
+  %p2 = tail call double @llvm.powi.f64.i32(double %x, i32 %z)
+  %mul = fmul reassoc double %p2, %p1
+  ret double %mul
+}
+
+define double @powi_fmul_powi_fast_on_fmul(double %x, i32 %y, i32 %z) {
+; CHECK-LABEL: @powi_fmul_powi_fast_on_fmul(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[P1:%.*]] = tail call double @llvm.powi.f64.i32(double [[X:%.*]], i32 [[Y:%.*]])
+; CHECK-NEXT:    [[P2:%.*]] = tail call double @llvm.powi.f64.i32(double [[X]], i32 [[Z:%.*]])
+; CHECK-NEXT:    [[MUL:%.*]] = fmul fast double [[P2]], [[P1]]
+; CHECK-NEXT:    ret double [[MUL]]
+;
+entry:
+  %p1 = tail call double @llvm.powi.f64.i32(double %x, i32 %y)
+  %p2 = tail call double @llvm.powi.f64.i32(double %x, i32 %z)
+  %mul = fmul fast double %p2, %p1
+  ret double %mul
+}
+
+define double @powi_fmul_powi_fast_on_powi(double %x, i32 %y, i32 %z) {
+; CHECK-LABEL: @powi_fmul_powi_fast_on_powi(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[P1:%.*]] = tail call fast double @llvm.powi.f64.i32(double [[X:%.*]], i32 [[Y:%.*]])
+; CHECK-NEXT:    [[P2:%.*]] = tail call fast double @llvm.powi.f64.i32(double [[X]], i32 [[Z:%.*]])
+; CHECK-NEXT:    [[MUL:%.*]] = fmul double [[P2]], [[P1]]
+; CHECK-NEXT:    ret double [[MUL]]
+;
+entry:
+  %p1 = tail call fast double @llvm.powi.f64.i32(double %x, i32 %y)
+  %p2 = tail call fast double @llvm.powi.f64.i32(double %x, i32 %z)
+  %mul = fmul double %p2, %p1
+  ret double %mul
+}
+
+define double @powi_fmul_powi_same_power(double %x, i32 %y, i32 %z) {
+; CHECK-LABEL: @powi_fmul_powi_same_power(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[P1:%.*]] = tail call double @llvm.powi.f64.i32(double [[X:%.*]], i32 [[Y:%.*]])
+; CHECK-NEXT:    [[P2:%.*]] = tail call double @llvm.powi.f64.i32(double [[X]], i32 [[Y]])
+; CHECK-NEXT:    [[MUL:%.*]] = fmul reassoc double [[P2]], [[P1]]
+; CHECK-NEXT:    ret double [[MUL]]
+;
+entry:
+  %p1 = tail call double @llvm.powi.f64.i32(double %x, i32 %y)
+  %p2 = tail call double @llvm.powi.f64.i32(double %x, i32 %y)
+  %mul = fmul reassoc double %p2, %p1
+  ret double %mul
+}
+
+define double @powi_fmul_powi_use_first(double %x, i32 %y, i32 %z) {
+; CHECK-LABEL: @powi_fmul_powi_use_first(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[P1:%.*]] = tail call double @llvm.powi.f64.i32(double [[X:%.*]], i32 [[Y:%.*]])
+; CHECK-NEXT:    tail call void @use(double [[P1]])
+; CHECK-NEXT:    [[P2:%.*]] = tail call double @llvm.powi.f64.i32(double [[X]], i32 [[Z:%.*]])
+; CHECK-NEXT:    [[MUL:%.*]] = fmul reassoc double [[P2]], [[P1]]
+; CHECK-NEXT:    ret double [[MUL]]
+;
+entry:
+  %p1 = tail call double @llvm.powi.f64.i32(double %x, i32 %y)
+  tail call void @use(double %p1)
+  %p2 = tail call double @llvm.powi.f64.i32(double %x, i32 %z)
+  %mul = fmul reassoc double %p2, %p1
+  ret double %mul
+}
+
+define double @powi_fmul_powi_use_second(double %x, i32 %y, i32 %z) {
+; CHECK-LABEL: @powi_fmul_powi_use_second(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[P1:%.*]] = tail call double @llvm.powi.f64.i32(double [[X:%.*]], i32 [[Z:%.*]])
+; CHECK-NEXT:    tail call void @use(double [[P1]])
+; CHECK-NEXT:    [[P2:%.*]] = tail call double @llvm.powi.f64.i32(double [[X]], i32 [[Y:%.*]])
+; CHECK-NEXT:    [[MUL:%.*]] = fmul reassoc double [[P2]], [[P1]]
+; CHECK-NEXT:    ret double [[MUL]]
+;
+entry:
+  %p1 = tail call double @llvm.powi.f64.i32(double %x, i32 %z)
+  tail call void @use(double %p1)
+  %p2 = tail call double @llvm.powi.f64.i32(double %x, i32 %y)
+  %mul = fmul reassoc double %p2, %p1
+  ret double %mul
+}
+
+define double @powi_fmul_
diff erent_base(double %x, double %m, i32 %y, i32 %z) {
+; CHECK-LABEL: @powi_fmul_
diff erent_base(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[P1:%.*]] = tail call double @llvm.powi.f64.i32(double [[X:%.*]], i32 [[Y:%.*]])
+; CHECK-NEXT:    [[P2:%.*]] = tail call double @llvm.powi.f64.i32(double [[M:%.*]], i32 [[Z:%.*]])
+; CHECK-NEXT:    [[MUL:%.*]] = fmul reassoc double [[P2]], [[P1]]
+; CHECK-NEXT:    ret double [[MUL]]
+;
+entry:
+  %p1 = tail call double @llvm.powi.f64.i32(double %x, i32 %y)
+  %p2 = tail call double @llvm.powi.f64.i32(double %m, i32 %z)
+  %mul = fmul reassoc double %p2, %p1
+  ret double %mul
+}
+
+define double @
diff erent_types_powi(double %x, i32 %y, i64 %z) {
+; CHECK-LABEL: @
diff erent_types_powi(
+; CHECK-NEXT:    [[P1:%.*]] = tail call double @llvm.powi.f64.i32(double [[X:%.*]], i32 [[Y:%.*]])
+; CHECK-NEXT:    [[P2:%.*]] = tail call double @llvm.powi.f64.i64(double [[X]], i64 [[Z:%.*]])
+; CHECK-NEXT:    [[MUL:%.*]] = fmul reassoc double [[P2]], [[P1]]
+; CHECK-NEXT:    ret double [[MUL]]
+;
+  %p1 = tail call double @llvm.powi.f64.i32(double %x, i32 %y)
+  %p2 = tail call double @llvm.powi.f64.i64(double %x, i64 %z)
+  %mul = fmul reassoc double %p2, %p1
+  ret double %mul
+}


        


More information about the llvm-commits mailing list