|
| 1 | + |
1 | 2 | // RUN: mlir-opt %s -convert-math-to-libm -canonicalize | FileCheck %s
|
2 | 3 |
|
3 | 4 | // CHECK-DAG: @acos(f64) -> f64 attributes {llvm.readnone}
|
|
58 | 59 | // CHECK-DAG: @ceilf(f32) -> f32 attributes {llvm.readnone}
|
59 | 60 | // CHECK-DAG: @sqrt(f64) -> f64 attributes {llvm.readnone}
|
60 | 61 | // CHECK-DAG: @sqrtf(f32) -> f32 attributes {llvm.readnone}
|
| 62 | +// CHECK-DAG: @rsqrt(f64) -> f64 attributes {llvm.readnone} |
| 63 | +// CHECK-DAG: @rsqrtf(f32) -> f32 attributes {llvm.readnone} |
61 | 64 | // CHECK-DAG: @pow(f64, f64) -> f64 attributes {llvm.readnone}
|
62 | 65 | // CHECK-DAG: @powf(f32, f32) -> f32 attributes {llvm.readnone}
|
63 | 66 |
|
@@ -999,6 +1002,43 @@ func.func @sqrt_vec_caller(%float: vector<2xf32>, %double: vector<2xf64>) -> (ve
|
999 | 1002 | // CHECK: return %[[VAL_11]], %[[VAL_17]] : vector<2xf32>, vector<2xf64>
|
1000 | 1003 | // CHECK: }
|
1001 | 1004 |
|
| 1005 | +// CHECK-LABEL: func @rsqrt_caller |
| 1006 | +// CHECK-SAME: %[[FLOAT:.*]]: f32 |
| 1007 | +// CHECK-SAME: %[[DOUBLE:.*]]: f64 |
| 1008 | +func.func @rsqrt_caller(%float: f32, %double: f64) -> (f32, f64) { |
| 1009 | + // CHECK-DAG: %[[FLOAT_RESULT:.*]] = call @rsqrtf(%[[FLOAT]]) : (f32) -> f32 |
| 1010 | + %float_result = math.rsqrt %float : f32 |
| 1011 | + // CHECK-DAG: %[[DOUBLE_RESULT:.*]] = call @rsqrt(%[[DOUBLE]]) : (f64) -> f64 |
| 1012 | + %double_result = math.rsqrt %double : f64 |
| 1013 | + // CHECK: return %[[FLOAT_RESULT]], %[[DOUBLE_RESULT]] |
| 1014 | + return %float_result, %double_result : f32, f64 |
| 1015 | +} |
| 1016 | + |
| 1017 | +func.func @rsqrt_vec_caller(%float: vector<2xf32>, %double: vector<2xf64>) -> (vector<2xf32>, vector<2xf64>) { |
| 1018 | + %float_result = math.rsqrt %float : vector<2xf32> |
| 1019 | + %double_result = math.rsqrt %double : vector<2xf64> |
| 1020 | + return %float_result, %double_result : vector<2xf32>, vector<2xf64> |
| 1021 | +} |
| 1022 | +// CHECK-LABEL: func @rsqrt_vec_caller( |
| 1023 | +// CHECK-SAME: %[[VAL_0:.*]]: vector<2xf32>, |
| 1024 | +// CHECK-SAME: %[[VAL_1:.*]]: vector<2xf64>) -> (vector<2xf32>, vector<2xf64>) { |
| 1025 | +// CHECK-DAG: %[[CVF:.*]] = arith.constant dense<0.000000e+00> : vector<2xf32> |
| 1026 | +// CHECK-DAG: %[[CVD:.*]] = arith.constant dense<0.000000e+00> : vector<2xf64> |
| 1027 | +// CHECK: %[[IN0_F32:.*]] = vector.extract %[[VAL_0]][0] : f32 from vector<2xf32> |
| 1028 | +// CHECK: %[[OUT0_F32:.*]] = call @rsqrtf(%[[IN0_F32]]) : (f32) -> f32 |
| 1029 | +// CHECK: %[[VAL_8:.*]] = vector.insert %[[OUT0_F32]], %[[CVF]] [0] : f32 into vector<2xf32> |
| 1030 | +// CHECK: %[[IN1_F32:.*]] = vector.extract %[[VAL_0]][1] : f32 from vector<2xf32> |
| 1031 | +// CHECK: %[[OUT1_F32:.*]] = call @rsqrtf(%[[IN1_F32]]) : (f32) -> f32 |
| 1032 | +// CHECK: %[[VAL_11:.*]] = vector.insert %[[OUT1_F32]], %[[VAL_8]] [1] : f32 into vector<2xf32> |
| 1033 | +// CHECK: %[[IN0_F64:.*]] = vector.extract %[[VAL_1]][0] : f64 from vector<2xf64> |
| 1034 | +// CHECK: %[[OUT0_F64:.*]] = call @rsqrt(%[[IN0_F64]]) : (f64) -> f64 |
| 1035 | +// CHECK: %[[VAL_14:.*]] = vector.insert %[[OUT0_F64]], %[[CVD]] [0] : f64 into vector<2xf64> |
| 1036 | +// CHECK: %[[IN1_F64:.*]] = vector.extract %[[VAL_1]][1] : f64 from vector<2xf64> |
| 1037 | +// CHECK: %[[OUT1_F64:.*]] = call @rsqrt(%[[IN1_F64]]) : (f64) -> f64 |
| 1038 | +// CHECK: %[[VAL_17:.*]] = vector.insert %[[OUT1_F64]], %[[VAL_14]] [1] : f64 into vector<2xf64> |
| 1039 | +// CHECK: return %[[VAL_11]], %[[VAL_17]] : vector<2xf32>, vector<2xf64> |
| 1040 | +// CHECK: } |
| 1041 | + |
1002 | 1042 | // CHECK-LABEL: func @powf_caller(
|
1003 | 1043 | // CHECK-SAME: %[[FLOATA:.*]]: f32, %[[FLOATB:.*]]: f32
|
1004 | 1044 | // CHECK-SAME: %[[DOUBLEA:.*]]: f64, %[[DOUBLEB:.*]]: f64
|
|
0 commit comments