xref: /llvm-project/mlir/test/Dialect/Math/ops.mlir (revision 998a3a38948c9d220ddc759b8a6eee987e3ad320)
14348d8abSStephan Herhut// RUN: mlir-opt %s | mlir-opt | FileCheck %s
24348d8abSStephan Herhut// RUN: mlir-opt %s --mlir-print-op-generic | mlir-opt | FileCheck %s
34348d8abSStephan Herhut
44348d8abSStephan Herhut// CHECK-LABEL: func @atan(
54348d8abSStephan Herhut// CHECK-SAME:             %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
60254b0bcSRiver Riddlefunc.func @atan(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
74348d8abSStephan Herhut  // CHECK: %{{.*}} = math.atan %[[F]] : f32
84348d8abSStephan Herhut  %0 = math.atan %f : f32
94348d8abSStephan Herhut  // CHECK: %{{.*}} = math.atan %[[V]] : vector<4xf32>
104348d8abSStephan Herhut  %1 = math.atan %v : vector<4xf32>
114348d8abSStephan Herhut  // CHECK: %{{.*}} = math.atan %[[T]] : tensor<4x4x?xf32>
124348d8abSStephan Herhut  %2 = math.atan %t : tensor<4x4x?xf32>
134348d8abSStephan Herhut  return
144348d8abSStephan Herhut}
154348d8abSStephan Herhut
164348d8abSStephan Herhut
174348d8abSStephan Herhut// CHECK-LABEL: func @atan2(
184348d8abSStephan Herhut// CHECK-SAME:             %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
190254b0bcSRiver Riddlefunc.func @atan2(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
204348d8abSStephan Herhut  // CHECK: %{{.*}} = math.atan2 %[[F]], %[[F]] : f32
214348d8abSStephan Herhut  %0 = math.atan2 %f, %f : f32
224348d8abSStephan Herhut  // CHECK: %{{.*}} = math.atan2 %[[V]], %[[V]] : vector<4xf32>
234348d8abSStephan Herhut  %1 = math.atan2 %v, %v : vector<4xf32>
244348d8abSStephan Herhut  // CHECK: %{{.*}} = math.atan2 %[[T]], %[[T]] : tensor<4x4x?xf32>
254348d8abSStephan Herhut  %2 = math.atan2 %t, %t : tensor<4x4x?xf32>
264348d8abSStephan Herhut  return
274348d8abSStephan Herhut}
284348d8abSStephan Herhut
29*998a3a38SJohannes Reifferscheid// CHECK-LABEL: func @cbrt(
30*998a3a38SJohannes Reifferscheid// CHECK-SAME:             %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
31*998a3a38SJohannes Reifferscheidfunc.func @cbrt(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
32*998a3a38SJohannes Reifferscheid  // CHECK: %{{.*}} = math.cbrt %[[F]] : f32
33*998a3a38SJohannes Reifferscheid  %0 = math.cbrt %f : f32
34*998a3a38SJohannes Reifferscheid  // CHECK: %{{.*}} = math.cbrt %[[V]] : vector<4xf32>
35*998a3a38SJohannes Reifferscheid  %1 = math.cbrt %v : vector<4xf32>
36*998a3a38SJohannes Reifferscheid  // CHECK: %{{.*}} = math.cbrt %[[T]] : tensor<4x4x?xf32>
37*998a3a38SJohannes Reifferscheid  %2 = math.cbrt %t : tensor<4x4x?xf32>
38*998a3a38SJohannes Reifferscheid  return
39*998a3a38SJohannes Reifferscheid}
40*998a3a38SJohannes Reifferscheid
414348d8abSStephan Herhut// CHECK-LABEL: func @cos(
424348d8abSStephan Herhut// CHECK-SAME:            %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
430254b0bcSRiver Riddlefunc.func @cos(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
444348d8abSStephan Herhut  // CHECK: %{{.*}} = math.cos %[[F]] : f32
454348d8abSStephan Herhut  %0 = math.cos %f : f32
464348d8abSStephan Herhut  // CHECK: %{{.*}} = math.cos %[[V]] : vector<4xf32>
474348d8abSStephan Herhut  %1 = math.cos %v : vector<4xf32>
484348d8abSStephan Herhut  // CHECK: %{{.*}} = math.cos %[[T]] : tensor<4x4x?xf32>
494348d8abSStephan Herhut  %2 = math.cos %t : tensor<4x4x?xf32>
504348d8abSStephan Herhut  return
514348d8abSStephan Herhut}
524348d8abSStephan Herhut
534348d8abSStephan Herhut// CHECK-LABEL: func @sin(
544348d8abSStephan Herhut// CHECK-SAME:            %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
550254b0bcSRiver Riddlefunc.func @sin(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
564348d8abSStephan Herhut  // CHECK: %{{.*}} = math.sin %[[F]] : f32
574348d8abSStephan Herhut  %0 = math.sin %f : f32
584348d8abSStephan Herhut  // CHECK: %{{.*}} = math.sin %[[V]] : vector<4xf32>
594348d8abSStephan Herhut  %1 = math.sin %v : vector<4xf32>
604348d8abSStephan Herhut  // CHECK: %{{.*}} = math.sin %[[T]] : tensor<4x4x?xf32>
614348d8abSStephan Herhut  %2 = math.sin %t : tensor<4x4x?xf32>
624348d8abSStephan Herhut  return
634348d8abSStephan Herhut}
644348d8abSStephan Herhut
65f1b92218SBoian Petkantchin// CHECK-LABEL: func @erf(
66f1b92218SBoian Petkantchin// CHECK-SAME:            %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
670254b0bcSRiver Riddlefunc.func @erf(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
68f1b92218SBoian Petkantchin  // CHECK: %{{.*}} = math.erf %[[F]] : f32
69f1b92218SBoian Petkantchin  %0 = math.erf %f : f32
70f1b92218SBoian Petkantchin  // CHECK: %{{.*}} = math.erf %[[V]] : vector<4xf32>
71f1b92218SBoian Petkantchin  %1 = math.erf %v : vector<4xf32>
72f1b92218SBoian Petkantchin  // CHECK: %{{.*}} = math.erf %[[T]] : tensor<4x4x?xf32>
73f1b92218SBoian Petkantchin  %2 = math.erf %t : tensor<4x4x?xf32>
74f1b92218SBoian Petkantchin  return
75f1b92218SBoian Petkantchin}
76f1b92218SBoian Petkantchin
774348d8abSStephan Herhut// CHECK-LABEL: func @exp(
784348d8abSStephan Herhut// CHECK-SAME:            %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
790254b0bcSRiver Riddlefunc.func @exp(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
804348d8abSStephan Herhut  // CHECK: %{{.*}} = math.exp %[[F]] : f32
814348d8abSStephan Herhut  %0 = math.exp %f : f32
824348d8abSStephan Herhut  // CHECK: %{{.*}} = math.exp %[[V]] : vector<4xf32>
834348d8abSStephan Herhut  %1 = math.exp %v : vector<4xf32>
844348d8abSStephan Herhut  // CHECK: %{{.*}} = math.exp %[[T]] : tensor<4x4x?xf32>
854348d8abSStephan Herhut  %2 = math.exp %t : tensor<4x4x?xf32>
864348d8abSStephan Herhut  return
874348d8abSStephan Herhut}
884348d8abSStephan Herhut
894348d8abSStephan Herhut// CHECK-LABEL: func @exp2(
904348d8abSStephan Herhut// CHECK-SAME:             %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
910254b0bcSRiver Riddlefunc.func @exp2(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
924348d8abSStephan Herhut  // CHECK: %{{.*}} = math.exp2 %[[F]] : f32
934348d8abSStephan Herhut  %0 = math.exp2 %f : f32
944348d8abSStephan Herhut  // CHECK: %{{.*}} = math.exp2 %[[V]] : vector<4xf32>
954348d8abSStephan Herhut  %1 = math.exp2 %v : vector<4xf32>
964348d8abSStephan Herhut  // CHECK: %{{.*}} = math.exp2 %[[T]] : tensor<4x4x?xf32>
974348d8abSStephan Herhut  %2 = math.exp2 %t : tensor<4x4x?xf32>
984348d8abSStephan Herhut  return
994348d8abSStephan Herhut}
1004348d8abSStephan Herhut
1019f581815SAdrian Kuegel// CHECK-LABEL: func @expm1(
1029f581815SAdrian Kuegel// CHECK-SAME:            %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
1030254b0bcSRiver Riddlefunc.func @expm1(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
1049f581815SAdrian Kuegel  // CHECK: %{{.*}} = math.expm1 %[[F]] : f32
1059f581815SAdrian Kuegel  %0 = math.expm1 %f : f32
1069f581815SAdrian Kuegel  // CHECK: %{{.*}} = math.expm1 %[[V]] : vector<4xf32>
1079f581815SAdrian Kuegel  %1 = math.expm1 %v : vector<4xf32>
1089f581815SAdrian Kuegel  // CHECK: %{{.*}} = math.expm1 %[[T]] : tensor<4x4x?xf32>
1099f581815SAdrian Kuegel  %2 = math.expm1 %t : tensor<4x4x?xf32>
1109f581815SAdrian Kuegel  return
1119f581815SAdrian Kuegel}
1129f581815SAdrian Kuegel
1134348d8abSStephan Herhut// CHECK-LABEL: func @log(
1144348d8abSStephan Herhut// CHECK-SAME:            %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
1150254b0bcSRiver Riddlefunc.func @log(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
1164348d8abSStephan Herhut  // CHECK: %{{.*}} = math.log %[[F]] : f32
1174348d8abSStephan Herhut  %0 = math.log %f : f32
1184348d8abSStephan Herhut  // CHECK: %{{.*}} = math.log %[[V]] : vector<4xf32>
1194348d8abSStephan Herhut  %1 = math.log %v : vector<4xf32>
1204348d8abSStephan Herhut  // CHECK: %{{.*}} = math.log %[[T]] : tensor<4x4x?xf32>
1214348d8abSStephan Herhut  %2 = math.log %t : tensor<4x4x?xf32>
1224348d8abSStephan Herhut  return
1234348d8abSStephan Herhut}
1244348d8abSStephan Herhut
1254348d8abSStephan Herhut// CHECK-LABEL: func @log10(
1264348d8abSStephan Herhut// CHECK-SAME:              %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
1270254b0bcSRiver Riddlefunc.func @log10(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
1284348d8abSStephan Herhut  // CHECK: %{{.*}} = math.log10 %[[F]] : f32
1294348d8abSStephan Herhut  %0 = math.log10 %f : f32
1304348d8abSStephan Herhut  // CHECK: %{{.*}} = math.log10 %[[V]] : vector<4xf32>
1314348d8abSStephan Herhut  %1 = math.log10 %v : vector<4xf32>
1324348d8abSStephan Herhut  // CHECK: %{{.*}} = math.log10 %[[T]] : tensor<4x4x?xf32>
1334348d8abSStephan Herhut  %2 = math.log10 %t : tensor<4x4x?xf32>
1344348d8abSStephan Herhut  return
1354348d8abSStephan Herhut}
1364348d8abSStephan Herhut
1374348d8abSStephan Herhut// CHECK-LABEL: func @log1p(
1384348d8abSStephan Herhut// CHECK-SAME:              %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
1390254b0bcSRiver Riddlefunc.func @log1p(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
1404348d8abSStephan Herhut  // CHECK: %{{.*}} = math.log1p %[[F]] : f32
1414348d8abSStephan Herhut  %0 = math.log1p %f : f32
1424348d8abSStephan Herhut  // CHECK: %{{.*}} = math.log1p %[[V]] : vector<4xf32>
1434348d8abSStephan Herhut  %1 = math.log1p %v : vector<4xf32>
1444348d8abSStephan Herhut  // CHECK: %{{.*}} = math.log1p %[[T]] : tensor<4x4x?xf32>
1454348d8abSStephan Herhut  %2 = math.log1p %t : tensor<4x4x?xf32>
1464348d8abSStephan Herhut  return
1474348d8abSStephan Herhut}
1484348d8abSStephan Herhut
1494348d8abSStephan Herhut// CHECK-LABEL: func @log2(
1504348d8abSStephan Herhut// CHECK-SAME:             %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
1510254b0bcSRiver Riddlefunc.func @log2(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
1524348d8abSStephan Herhut  // CHECK: %{{.*}} = math.log2 %[[F]] : f32
1534348d8abSStephan Herhut  %0 = math.log2 %f : f32
1544348d8abSStephan Herhut  // CHECK: %{{.*}} = math.log2 %[[V]] : vector<4xf32>
1554348d8abSStephan Herhut  %1 = math.log2 %v : vector<4xf32>
1564348d8abSStephan Herhut  // CHECK: %{{.*}} = math.log2 %[[T]] : tensor<4x4x?xf32>
1574348d8abSStephan Herhut  %2 = math.log2 %t : tensor<4x4x?xf32>
1584348d8abSStephan Herhut  return
1594348d8abSStephan Herhut}
1604348d8abSStephan Herhut
1614348d8abSStephan Herhut// CHECK-LABEL: func @powf(
1624348d8abSStephan Herhut// CHECK-SAME:             %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
1630254b0bcSRiver Riddlefunc.func @powf(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
1644348d8abSStephan Herhut  // CHECK: %{{.*}} = math.powf %[[F]], %[[F]] : f32
1654348d8abSStephan Herhut  %0 = math.powf %f, %f : f32
1664348d8abSStephan Herhut  // CHECK: %{{.*}} = math.powf %[[V]], %[[V]] : vector<4xf32>
1674348d8abSStephan Herhut  %1 = math.powf %v, %v : vector<4xf32>
1684348d8abSStephan Herhut  // CHECK: %{{.*}} = math.powf %[[T]], %[[T]] : tensor<4x4x?xf32>
1694348d8abSStephan Herhut  %2 = math.powf %t, %t : tensor<4x4x?xf32>
1704348d8abSStephan Herhut  return
1714348d8abSStephan Herhut}
1724348d8abSStephan Herhut
173f9d988f1SSlava Zakharin// CHECK-LABEL: func @fpowi(
174f9d988f1SSlava Zakharin// CHECK-SAME: %[[SB:.*]]: f32, %[[SP:.*]]: i32,
175f9d988f1SSlava Zakharin// CHECK-SAME: %[[VB:.*]]: vector<4xf64>, %[[VP:.*]]: vector<4xi16>,
176f9d988f1SSlava Zakharin// CHECK-SAME: %[[TB:.*]]: tensor<4x3x?xf16>, %[[TP:.*]]: tensor<4x3x?xi64>) {
177f9d988f1SSlava Zakharinfunc.func @fpowi(%b: f32, %p: i32, %vb: vector<4xf64>, %vp: vector<4xi16>, %tb: tensor<4x3x?xf16>, %tp: tensor<4x3x?xi64>) {
178f9d988f1SSlava Zakharin// CHECK: {{.*}} = math.fpowi %[[SB]], %[[SP]] : f32, i32
179f9d988f1SSlava Zakharin  %0 = math.fpowi %b, %p : f32, i32
180f9d988f1SSlava Zakharin// CHECK: {{.*}} = math.fpowi %[[VB]], %[[VP]] : vector<4xf64>, vector<4xi16>
181f9d988f1SSlava Zakharin  %1 = math.fpowi %vb, %vp : vector<4xf64>, vector<4xi16>
182f9d988f1SSlava Zakharin// CHECK: {{.*}} = math.fpowi %[[TB]], %[[TP]] : tensor<4x3x?xf16>, tensor<4x3x?xi64>
183f9d988f1SSlava Zakharin  %2 = math.fpowi %tb, %tp : tensor<4x3x?xf16>, tensor<4x3x?xi64>
184f9d988f1SSlava Zakharin  return
185f9d988f1SSlava Zakharin}
186f9d988f1SSlava Zakharin
1874348d8abSStephan Herhut// CHECK-LABEL: func @rsqrt(
1884348d8abSStephan Herhut// CHECK-SAME:              %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
1890254b0bcSRiver Riddlefunc.func @rsqrt(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
1904348d8abSStephan Herhut  // CHECK: %{{.*}} = math.rsqrt %[[F]] : f32
1914348d8abSStephan Herhut  %0 = math.rsqrt %f : f32
1924348d8abSStephan Herhut  // CHECK: %{{.*}} = math.rsqrt %[[V]] : vector<4xf32>
1934348d8abSStephan Herhut  %1 = math.rsqrt %v : vector<4xf32>
1944348d8abSStephan Herhut  // CHECK: %{{.*}} = math.rsqrt %[[T]] : tensor<4x4x?xf32>
1954348d8abSStephan Herhut  %2 = math.rsqrt %t : tensor<4x4x?xf32>
1964348d8abSStephan Herhut  return
1974348d8abSStephan Herhut}
1984348d8abSStephan Herhut
1994348d8abSStephan Herhut
2004348d8abSStephan Herhut// CHECK-LABEL: func @sqrt(
2014348d8abSStephan Herhut// CHECK-SAME:             %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
2020254b0bcSRiver Riddlefunc.func @sqrt(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
2034348d8abSStephan Herhut  // CHECK: %{{.*}} = math.sqrt %[[F]] : f32
2044348d8abSStephan Herhut  %0 = math.sqrt %f : f32
2054348d8abSStephan Herhut  // CHECK: %{{.*}} = math.sqrt %[[V]] : vector<4xf32>
2064348d8abSStephan Herhut  %1 = math.sqrt %v : vector<4xf32>
2074348d8abSStephan Herhut  // CHECK: %{{.*}} = math.sqrt %[[T]] : tensor<4x4x?xf32>
2084348d8abSStephan Herhut  %2 = math.sqrt %t : tensor<4x4x?xf32>
2094348d8abSStephan Herhut  return
2104348d8abSStephan Herhut}
2114348d8abSStephan Herhut
212451e5e2bSSlava Zakharin// CHECK-LABEL: func @tan(
213451e5e2bSSlava Zakharin// CHECK-SAME:             %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
214451e5e2bSSlava Zakharinfunc.func @tan(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
215451e5e2bSSlava Zakharin  // CHECK: %{{.*}} = math.tan %[[F]] : f32
216451e5e2bSSlava Zakharin  %0 = math.tan %f : f32
217451e5e2bSSlava Zakharin  // CHECK: %{{.*}} = math.tan %[[V]] : vector<4xf32>
218451e5e2bSSlava Zakharin  %1 = math.tan %v : vector<4xf32>
219451e5e2bSSlava Zakharin  // CHECK: %{{.*}} = math.tan %[[T]] : tensor<4x4x?xf32>
220451e5e2bSSlava Zakharin  %2 = math.tan %t : tensor<4x4x?xf32>
221451e5e2bSSlava Zakharin  return
222451e5e2bSSlava Zakharin}
223451e5e2bSSlava Zakharin
2244348d8abSStephan Herhut// CHECK-LABEL: func @tanh(
2254348d8abSStephan Herhut// CHECK-SAME:             %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
2260254b0bcSRiver Riddlefunc.func @tanh(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
2274348d8abSStephan Herhut  // CHECK: %{{.*}} = math.tanh %[[F]] : f32
2284348d8abSStephan Herhut  %0 = math.tanh %f : f32
2294348d8abSStephan Herhut  // CHECK: %{{.*}} = math.tanh %[[V]] : vector<4xf32>
2304348d8abSStephan Herhut  %1 = math.tanh %v : vector<4xf32>
2314348d8abSStephan Herhut  // CHECK: %{{.*}} = math.tanh %[[T]] : tensor<4x4x?xf32>
2324348d8abSStephan Herhut  %2 = math.tanh %t : tensor<4x4x?xf32>
2334348d8abSStephan Herhut  return
2344348d8abSStephan Herhut}
235a0fc94abSlorenzo chelini
236a0fc94abSlorenzo chelini// CHECK-LABEL: func @round(
237a0fc94abSlorenzo chelini// CHECK-SAME:             %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
238a0fc94abSlorenzo chelinifunc.func @round(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
239a0fc94abSlorenzo chelini  // CHECK: %{{.*}} = math.round %[[F]] : f32
240a0fc94abSlorenzo chelini  %0 = math.round %f : f32
241a0fc94abSlorenzo chelini  // CHECK: %{{.*}} = math.round %[[V]] : vector<4xf32>
242a0fc94abSlorenzo chelini  %1 = math.round %v : vector<4xf32>
243a0fc94abSlorenzo chelini  // CHECK: %{{.*}} = math.round %[[T]] : tensor<4x4x?xf32>
244a0fc94abSlorenzo chelini  %2 = math.round %t : tensor<4x4x?xf32>
245a0fc94abSlorenzo chelini  return
246a0fc94abSlorenzo chelini}
24708b4cf36SSlava Zakharin
2484639a85fSTres Popp// CHECK-LABEL: func @roundeven(
2494639a85fSTres Popp// CHECK-SAME:             %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
2504639a85fSTres Poppfunc.func @roundeven(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
2514639a85fSTres Popp  // CHECK: %{{.*}} = math.roundeven %[[F]] : f32
2524639a85fSTres Popp  %0 = math.roundeven %f : f32
2534639a85fSTres Popp  // CHECK: %{{.*}} = math.roundeven %[[V]] : vector<4xf32>
2544639a85fSTres Popp  %1 = math.roundeven %v : vector<4xf32>
2554639a85fSTres Popp  // CHECK: %{{.*}} = math.roundeven %[[T]] : tensor<4x4x?xf32>
2564639a85fSTres Popp  %2 = math.roundeven %t : tensor<4x4x?xf32>
2574639a85fSTres Popp  return
2584639a85fSTres Popp}
2594639a85fSTres Popp
2604639a85fSTres Popp
26108b4cf36SSlava Zakharin// CHECK-LABEL: func @ipowi(
26208b4cf36SSlava Zakharin// CHECK-SAME:             %[[I:.*]]: i32, %[[V:.*]]: vector<4xi32>, %[[T:.*]]: tensor<4x4x?xi32>)
26308b4cf36SSlava Zakharinfunc.func @ipowi(%i: i32, %v: vector<4xi32>, %t: tensor<4x4x?xi32>) {
26408b4cf36SSlava Zakharin  // CHECK: %{{.*}} = math.ipowi %[[I]], %[[I]] : i32
26508b4cf36SSlava Zakharin  %0 = math.ipowi %i, %i : i32
26608b4cf36SSlava Zakharin  // CHECK: %{{.*}} = math.ipowi %[[V]], %[[V]] : vector<4xi32>
26708b4cf36SSlava Zakharin  %1 = math.ipowi %v, %v : vector<4xi32>
26808b4cf36SSlava Zakharin  // CHECK: %{{.*}} = math.ipowi %[[T]], %[[T]] : tensor<4x4x?xi32>
26908b4cf36SSlava Zakharin  %2 = math.ipowi %t, %t : tensor<4x4x?xi32>
27008b4cf36SSlava Zakharin  return
27108b4cf36SSlava Zakharin}
2729d0b90e9Sjacquesguan
2739d0b90e9Sjacquesguan// CHECK-LABEL: func @trunc(
2749d0b90e9Sjacquesguan// CHECK-SAME:             %[[F:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
2759d0b90e9Sjacquesguanfunc.func @trunc(%f: f32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
2769d0b90e9Sjacquesguan  // CHECK: %{{.*}} = math.trunc %[[F]] : f32
2779d0b90e9Sjacquesguan  %0 = math.trunc %f : f32
2789d0b90e9Sjacquesguan  // CHECK: %{{.*}} = math.trunc %[[V]] : vector<4xf32>
2799d0b90e9Sjacquesguan  %1 = math.trunc %v : vector<4xf32>
2809d0b90e9Sjacquesguan  // CHECK: %{{.*}} = math.trunc %[[T]] : tensor<4x4x?xf32>
2819d0b90e9Sjacquesguan  %2 = math.trunc %t : tensor<4x4x?xf32>
2829d0b90e9Sjacquesguan  return
2839d0b90e9Sjacquesguan}
284589764a3SSlava Zakharin
285589764a3SSlava Zakharin// CHECK-LABEL: func @fastmath(
28607a4c4d6SSlava Zakharin// CHECK-SAME:      %[[F:.*]]: f32, %[[I:.*]]: i32,
28707a4c4d6SSlava Zakharin// CHECK-SAME:      %[[V:.*]]: vector<4xf32>, %[[T:.*]]: tensor<4x4x?xf32>)
28807a4c4d6SSlava Zakharinfunc.func @fastmath(%f: f32, %i: i32, %v: vector<4xf32>, %t: tensor<4x4x?xf32>) {
28907a4c4d6SSlava Zakharin  // CHECK: math.trunc %[[F]] fastmath<fast> : f32
290589764a3SSlava Zakharin  %0 = math.trunc %f fastmath<fast> : f32
29107a4c4d6SSlava Zakharin  // CHECK: math.powf %[[V]], %[[V]] fastmath<fast> : vector<4xf32>
292589764a3SSlava Zakharin  %1 = math.powf %v, %v fastmath<reassoc,nnan,ninf,nsz,arcp,contract,afn> : vector<4xf32>
29307a4c4d6SSlava Zakharin  // CHECK: math.fma %[[T]], %[[T]], %[[T]] : tensor<4x4x?xf32>
294589764a3SSlava Zakharin  %2 = math.fma %t, %t, %t fastmath<none> : tensor<4x4x?xf32>
29507a4c4d6SSlava Zakharin  // CHECK: math.absf %[[F]] fastmath<ninf> : f32
296589764a3SSlava Zakharin  %3 = math.absf %f fastmath<ninf> : f32
29707a4c4d6SSlava Zakharin  // CHECK: math.fpowi %[[F]], %[[I]] fastmath<fast> : f32, i32
29807a4c4d6SSlava Zakharin  %4 = math.fpowi %f, %i fastmath<fast> : f32, i32
299589764a3SSlava Zakharin  return
300589764a3SSlava Zakharin}
301