1// RUN: mlir-opt %s | mlir-opt | FileCheck %s
2// RUN: mlir-opt %s --mlir-print-op-generic | mlir-opt | FileCheck %s
3
4// CHECK-LABEL: func @atan(
5// CHECK-SAME:             %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
6func.func @atan(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
7  // CHECK: %{{.*}} = math.atan %[[F]] : f32
8  %0 = math.atan %f : f32
9  // CHECK: %{{.*}} = math.atan %[[V]] : vector<4xf32>
10  %1 = math.atan %v : vector<4xf32>
11  // CHECK: %{{.*}} = math.atan %[[T]] : tensor<4x4x?xf32>
12  %2 = math.atan %t : tensor<4x4x?xf32>
13  return
14}
15
16
17// CHECK-LABEL: func @atan2(
18// CHECK-SAME:             %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
19func.func @atan2(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
20  // CHECK: %{{.*}} = math.atan2 %[[F]], %[[F]] : f32
21  %0 = math.atan2 %f, %f : f32
22  // CHECK: %{{.*}} = math.atan2 %[[V]], %[[V]] : vector<4xf32>
23  %1 = math.atan2 %v, %v : vector<4xf32>
24  // CHECK: %{{.*}} = math.atan2 %[[T]], %[[T]] : tensor<4x4x?xf32>
25  %2 = math.atan2 %t, %t : tensor<4x4x?xf32>
26  return
27}
28
29// CHECK-LABEL: func @cos(
30// CHECK-SAME:            %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
31func.func @cos(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
32  // CHECK: %{{.*}} = math.cos %[[F]] : f32
33  %0 = math.cos %f : f32
34  // CHECK: %{{.*}} = math.cos %[[V]] : vector<4xf32>
35  %1 = math.cos %v : vector<4xf32>
36  // CHECK: %{{.*}} = math.cos %[[T]] : tensor<4x4x?xf32>
37  %2 = math.cos %t : tensor<4x4x?xf32>
38  return
39}
40
41// CHECK-LABEL: func @sin(
42// CHECK-SAME:            %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
43func.func @sin(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
44  // CHECK: %{{.*}} = math.sin %[[F]] : f32
45  %0 = math.sin %f : f32
46  // CHECK: %{{.*}} = math.sin %[[V]] : vector<4xf32>
47  %1 = math.sin %v : vector<4xf32>
48  // CHECK: %{{.*}} = math.sin %[[T]] : tensor<4x4x?xf32>
49  %2 = math.sin %t : tensor<4x4x?xf32>
50  return
51}
52
53// CHECK-LABEL: func @erf(
54// CHECK-SAME:            %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
55func.func @erf(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
56  // CHECK: %{{.*}} = math.erf %[[F]] : f32
57  %0 = math.erf %f : f32
58  // CHECK: %{{.*}} = math.erf %[[V]] : vector<4xf32>
59  %1 = math.erf %v : vector<4xf32>
60  // CHECK: %{{.*}} = math.erf %[[T]] : tensor<4x4x?xf32>
61  %2 = math.erf %t : tensor<4x4x?xf32>
62  return
63}
64
65// CHECK-LABEL: func @exp(
66// CHECK-SAME:            %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
67func.func @exp(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
68  // CHECK: %{{.*}} = math.exp %[[F]] : f32
69  %0 = math.exp %f : f32
70  // CHECK: %{{.*}} = math.exp %[[V]] : vector<4xf32>
71  %1 = math.exp %v : vector<4xf32>
72  // CHECK: %{{.*}} = math.exp %[[T]] : tensor<4x4x?xf32>
73  %2 = math.exp %t : tensor<4x4x?xf32>
74  return
75}
76
77// CHECK-LABEL: func @exp2(
78// CHECK-SAME:             %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
79func.func @exp2(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
80  // CHECK: %{{.*}} = math.exp2 %[[F]] : f32
81  %0 = math.exp2 %f : f32
82  // CHECK: %{{.*}} = math.exp2 %[[V]] : vector<4xf32>
83  %1 = math.exp2 %v : vector<4xf32>
84  // CHECK: %{{.*}} = math.exp2 %[[T]] : tensor<4x4x?xf32>
85  %2 = math.exp2 %t : tensor<4x4x?xf32>
86  return
87}
88
89// CHECK-LABEL: func @expm1(
90// CHECK-SAME:            %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
91func.func @expm1(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
92  // CHECK: %{{.*}} = math.expm1 %[[F]] : f32
93  %0 = math.expm1 %f : f32
94  // CHECK: %{{.*}} = math.expm1 %[[V]] : vector<4xf32>
95  %1 = math.expm1 %v : vector<4xf32>
96  // CHECK: %{{.*}} = math.expm1 %[[T]] : tensor<4x4x?xf32>
97  %2 = math.expm1 %t : tensor<4x4x?xf32>
98  return
99}
100
101// CHECK-LABEL: func @log(
102// CHECK-SAME:            %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
103func.func @log(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
104  // CHECK: %{{.*}} = math.log %[[F]] : f32
105  %0 = math.log %f : f32
106  // CHECK: %{{.*}} = math.log %[[V]] : vector<4xf32>
107  %1 = math.log %v : vector<4xf32>
108  // CHECK: %{{.*}} = math.log %[[T]] : tensor<4x4x?xf32>
109  %2 = math.log %t : tensor<4x4x?xf32>
110  return
111}
112
113// CHECK-LABEL: func @log10(
114// CHECK-SAME:              %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
115func.func @log10(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
116  // CHECK: %{{.*}} = math.log10 %[[F]] : f32
117  %0 = math.log10 %f : f32
118  // CHECK: %{{.*}} = math.log10 %[[V]] : vector<4xf32>
119  %1 = math.log10 %v : vector<4xf32>
120  // CHECK: %{{.*}} = math.log10 %[[T]] : tensor<4x4x?xf32>
121  %2 = math.log10 %t : tensor<4x4x?xf32>
122  return
123}
124
125// CHECK-LABEL: func @log1p(
126// CHECK-SAME:              %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
127func.func @log1p(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
128  // CHECK: %{{.*}} = math.log1p %[[F]] : f32
129  %0 = math.log1p %f : f32
130  // CHECK: %{{.*}} = math.log1p %[[V]] : vector<4xf32>
131  %1 = math.log1p %v : vector<4xf32>
132  // CHECK: %{{.*}} = math.log1p %[[T]] : tensor<4x4x?xf32>
133  %2 = math.log1p %t : tensor<4x4x?xf32>
134  return
135}
136
137// CHECK-LABEL: func @log2(
138// CHECK-SAME:             %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
139func.func @log2(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
140  // CHECK: %{{.*}} = math.log2 %[[F]] : f32
141  %0 = math.log2 %f : f32
142  // CHECK: %{{.*}} = math.log2 %[[V]] : vector<4xf32>
143  %1 = math.log2 %v : vector<4xf32>
144  // CHECK: %{{.*}} = math.log2 %[[T]] : tensor<4x4x?xf32>
145  %2 = math.log2 %t : tensor<4x4x?xf32>
146  return
147}
148
149// CHECK-LABEL: func @powf(
150// CHECK-SAME:             %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
151func.func @powf(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
152  // CHECK: %{{.*}} = math.powf %[[F]], %[[F]] : f32
153  %0 = math.powf %f, %f : f32
154  // CHECK: %{{.*}} = math.powf %[[V]], %[[V]] : vector<4xf32>
155  %1 = math.powf %v, %v : vector<4xf32>
156  // CHECK: %{{.*}} = math.powf %[[T]], %[[T]] : tensor<4x4x?xf32>
157  %2 = math.powf %t, %t : tensor<4x4x?xf32>
158  return
159}
160
161// CHECK-LABEL: func @rsqrt(
162// CHECK-SAME:              %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
163func.func @rsqrt(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
164  // CHECK: %{{.*}} = math.rsqrt %[[F]] : f32
165  %0 = math.rsqrt %f : f32
166  // CHECK: %{{.*}} = math.rsqrt %[[V]] : vector<4xf32>
167  %1 = math.rsqrt %v : vector<4xf32>
168  // CHECK: %{{.*}} = math.rsqrt %[[T]] : tensor<4x4x?xf32>
169  %2 = math.rsqrt %t : tensor<4x4x?xf32>
170  return
171}
172
173
174// CHECK-LABEL: func @sqrt(
175// CHECK-SAME:             %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
176func.func @sqrt(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
177  // CHECK: %{{.*}} = math.sqrt %[[F]] : f32
178  %0 = math.sqrt %f : f32
179  // CHECK: %{{.*}} = math.sqrt %[[V]] : vector<4xf32>
180  %1 = math.sqrt %v : vector<4xf32>
181  // CHECK: %{{.*}} = math.sqrt %[[T]] : tensor<4x4x?xf32>
182  %2 = math.sqrt %t : tensor<4x4x?xf32>
183  return
184}
185
186// CHECK-LABEL: func @tan(
187// CHECK-SAME:             %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
188func.func @tan(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
189  // CHECK: %{{.*}} = math.tan %[[F]] : f32
190  %0 = math.tan %f : f32
191  // CHECK: %{{.*}} = math.tan %[[V]] : vector<4xf32>
192  %1 = math.tan %v : vector<4xf32>
193  // CHECK: %{{.*}} = math.tan %[[T]] : tensor<4x4x?xf32>
194  %2 = math.tan %t : tensor<4x4x?xf32>
195  return
196}
197
198// CHECK-LABEL: func @tanh(
199// CHECK-SAME:             %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
200func.func @tanh(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
201  // CHECK: %{{.*}} = math.tanh %[[F]] : f32
202  %0 = math.tanh %f : f32
203  // CHECK: %{{.*}} = math.tanh %[[V]] : vector<4xf32>
204  %1 = math.tanh %v : vector<4xf32>
205  // CHECK: %{{.*}} = math.tanh %[[T]] : tensor<4x4x?xf32>
206  %2 = math.tanh %t : tensor<4x4x?xf32>
207  return
208}
209
210// CHECK-LABEL: func @round(
211// CHECK-SAME:             %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
212func.func @round(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
213  // CHECK: %{{.*}} = math.round %[[F]] : f32
214  %0 = math.round %f : f32
215  // CHECK: %{{.*}} = math.round %[[V]] : vector<4xf32>
216  %1 = math.round %v : vector<4xf32>
217  // CHECK: %{{.*}} = math.round %[[T]] : tensor<4x4x?xf32>
218  %2 = math.round %t : tensor<4x4x?xf32>
219  return
220}
221