xref: /llvm-project/mlir/test/Dialect/Arith/emulate-narrow-type.mlir (revision 5a1cdcbd8698cd263696b38e2672fccac9ec793c)
1// RUN: mlir-opt --test-emulate-narrow-int="arith-compute-bitwidth=8" %s | FileCheck %s
2
3// Expect no conversions, f32 is not an integer type.
4// CHECK-LABEL: func @identity_f32
5// CHECK-SAME:    ([[ARG:%.+]]: f32) -> f32
6// CHECK-NEXT:    return [[ARG]] : f32
7func.func @identity_f32(%a : f32) -> f32 {
8    return %a : f32
9}
10
11// Expect no conversions, i32 is supported.
12// CHECK-LABEL: func @identity_i32
13// CHECK-SAME:    ([[ARG:%.+]]: vector<2xi32>) -> vector<2xi32>
14// CHECK-NEXT:    return [[ARG]] : vector<2xi32>
15func.func @identity_i32(%a : vector<2xi32>) -> vector<2xi32> {
16    return %a : vector<2xi32>
17}
18
19// CHECK-LABEL: func @identity_scalar
20// CHECK-SAME:     ([[ARG:%.+]]: i8) -> i8
21// CHECK-NEXT:     return [[ARG]] : i8
22func.func @identity_scalar(%x : i4) -> i4 {
23    return %x : i4
24}
25
26// CHECK-LABEL: func @identity_vector
27// CHECK-SAME:     ([[ARG:%.+]]: vector<4xi8>) -> vector<4xi8>
28// CHECK-NEXT:     return [[ARG]] : vector<4xi8>
29func.func @identity_vector(%x : vector<4xi4>) -> vector<4xi4> {
30    return %x : vector<4xi4>
31}
32
33// CHECK-LABEL: func @identity_vector2d
34// CHECK-SAME:     ([[ARG:%.+]]: vector<3x4xi8>) -> vector<3x4xi8>
35// CHECK-NEXT:     return [[ARG]] : vector<3x4xi8>
36func.func @identity_vector2d(%x : vector<3x4xi4>) -> vector<3x4xi4> {
37    return %x : vector<3x4xi4>
38}
39
40// CHECK-LABEL: func @call
41// CHECK-SAME:     ([[ARG:%.+]]: vector<4xi8>) -> vector<4xi8>
42// CHECK-NEXT:     [[RES:%.+]] = call @identity_vector([[ARG]]) : (vector<4xi8>) -> vector<4xi8>
43// CHECK-NEXT:     return [[RES]] : vector<4xi8>
44func.func @call(%a : vector<4xi4>) -> vector<4xi4> {
45    %res = func.call @identity_vector(%a) : (vector<4xi4>) -> vector<4xi4>
46    return %res : vector<4xi4>
47}
48