|
1 | 1 | // RUN: mlir-opt %s -convert-math-to-libm -canonicalize | FileCheck %s
|
2 | 2 |
|
| 3 | +// CHECK-DAG: @acos(f64) -> f64 attributes {llvm.readnone} |
| 4 | +// CHECK-DAG: @acosf(f32) -> f32 attributes {llvm.readnone} |
3 | 5 | // CHECK-DAG: @atan(f64) -> f64 attributes {llvm.readnone}
|
4 | 6 | // CHECK-DAG: @atanf(f32) -> f32 attributes {llvm.readnone}
|
5 | 7 | // CHECK-DAG: @erf(f64) -> f64 attributes {llvm.readnone}
|
|
29 | 31 | // CHECK-DAG: @ceil(f64) -> f64 attributes {llvm.readnone}
|
30 | 32 | // CHECK-DAG: @ceilf(f32) -> f32 attributes {llvm.readnone}
|
31 | 33 |
|
| 34 | +// CHECK-LABEL: func @acos_caller |
| 35 | +// CHECK-SAME: %[[FLOAT:.*]]: f32 |
| 36 | +// CHECK-SAME: %[[DOUBLE:.*]]: f64 |
| 37 | +func.func @acos_caller(%float: f32, %double: f64) -> (f32, f64) { |
| 38 | + // CHECK-DAG: %[[FLOAT_RESULT:.*]] = call @acosf(%[[FLOAT]]) : (f32) -> f32 |
| 39 | + %float_result = math.acos %float : f32 |
| 40 | + // CHECK-DAG: %[[DOUBLE_RESULT:.*]] = call @acos(%[[DOUBLE]]) : (f64) -> f64 |
| 41 | + %double_result = math.acos %double : f64 |
| 42 | + // CHECK: return %[[FLOAT_RESULT]], %[[DOUBLE_RESULT]] |
| 43 | + return %float_result, %double_result : f32, f64 |
| 44 | +} |
| 45 | + |
| 46 | +// CHECK-LABEL: func @acos_vec_caller( |
| 47 | +// CHECK-SAME: %[[VAL_0:.*]]: vector<2xf32>, |
| 48 | +// CHECK-SAME: %[[VAL_1:.*]]: vector<2xf64>) -> (vector<2xf32>, vector<2xf64>) { |
| 49 | +// CHECK-DAG: %[[CVF:.*]] = arith.constant dense<0.000000e+00> : vector<2xf32> |
| 50 | +// CHECK-DAG: %[[CVD:.*]] = arith.constant dense<0.000000e+00> : vector<2xf64> |
| 51 | +// CHECK: %[[IN0_F32:.*]] = vector.extract %[[VAL_0]][0] : f32 from vector<2xf32> |
| 52 | +// CHECK: %[[OUT0_F32:.*]] = call @acosf(%[[IN0_F32]]) : (f32) -> f32 |
| 53 | +// CHECK: %[[VAL_8:.*]] = vector.insert %[[OUT0_F32]], %[[CVF]] [0] : f32 into vector<2xf32> |
| 54 | +// CHECK: %[[IN1_F32:.*]] = vector.extract %[[VAL_0]][1] : f32 from vector<2xf32> |
| 55 | +// CHECK: %[[OUT1_F32:.*]] = call @acosf(%[[IN1_F32]]) : (f32) -> f32 |
| 56 | +// CHECK: %[[VAL_11:.*]] = vector.insert %[[OUT1_F32]], %[[VAL_8]] [1] : f32 into vector<2xf32> |
| 57 | +// CHECK: %[[IN0_F64:.*]] = vector.extract %[[VAL_1]][0] : f64 from vector<2xf64> |
| 58 | +// CHECK: %[[OUT0_F64:.*]] = call @acos(%[[IN0_F64]]) : (f64) -> f64 |
| 59 | +// CHECK: %[[VAL_14:.*]] = vector.insert %[[OUT0_F64]], %[[CVD]] [0] : f64 into vector<2xf64> |
| 60 | +// CHECK: %[[IN1_F64:.*]] = vector.extract %[[VAL_1]][1] : f64 from vector<2xf64> |
| 61 | +// CHECK: %[[OUT1_F64:.*]] = call @acos(%[[IN1_F64]]) : (f64) -> f64 |
| 62 | +// CHECK: %[[VAL_17:.*]] = vector.insert %[[OUT1_F64]], %[[VAL_14]] [1] : f64 into vector<2xf64> |
| 63 | +// CHECK: return %[[VAL_11]], %[[VAL_17]] : vector<2xf32>, vector<2xf64> |
| 64 | +// CHECK: } |
| 65 | +func.func @acos_vec_caller(%float: vector<2xf32>, %double: vector<2xf64>) -> (vector<2xf32>, vector<2xf64>) { |
| 66 | + %float_result = math.acos %float : vector<2xf32> |
| 67 | + %double_result = math.acos %double : vector<2xf64> |
| 68 | + return %float_result, %double_result : vector<2xf32>, vector<2xf64> |
| 69 | +} |
| 70 | + |
32 | 71 | // CHECK-LABEL: func @atan_caller
|
33 | 72 | // CHECK-SAME: %[[FLOAT:.*]]: f32
|
34 | 73 | // CHECK-SAME: %[[DOUBLE:.*]]: f64
|
|
0 commit comments