Skip to content

Commit f5af018

Browse files
[Test] add more plaidML test by Gen (#633)
1 parent 4d4d951 commit f5af018

17 files changed

+918
-3
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ _install/
88
.idea/
99
cmake-build-debug/
1010
cmake-build-release/
11+
.github/
1112

1213
compile_commands.json
1314
*~

lib/ExecutionEngine/ImexRunnerUtils.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,8 @@ extern "C" bool _mlir_ciface_allcloseF16(UnrankedMemRefType<f16> *M,
9898
// atol, rtol values copied from
9999
// https://numpy.org/doc/stable/reference/generated/numpy.allclose.html
100100
// values may need to adjusted in the future
101-
const float atol = 1e-08;
102-
const float rtol = 1e-05;
101+
const float atol = 1e-04;
102+
const float rtol = 1e-03;
103103
DynamicMemRefType<f16> DM = DynamicMemRefType<f16>(*M);
104104
DynamicMemRefType<float> DN = DynamicMemRefType<float>(*N);
105105
DynamicMemRefIterator<f16> i = DM.begin();
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
// NUMPLACEHOLDERS 3 NUMVARIANTS 3
2+
// PLACEHOLDER DTYPE f32 f16 bf16
3+
// PLACEHOLDER PRINTDTYPE @printMemrefF32 @printMemrefF16 @printMemrefBF16
4+
// PLACEHOLDER CHECKDTYPE @printAllcloseF32 @printAllcloseF16 @printAllcloseBF16
5+
// RUN: %python_executable %imex_runner -i %s --pass-pipeline-file=%p/linalg-to-cpu.pp \
6+
// RUN: --runner imex-cpu-runner -e main \
7+
// RUN: --shared-libs=%mlir_runner_utils,%mlir_c_runner_utils,%irunner_utils \
8+
// RUN: --entry-point-result=void --filecheck
9+
// RUN: %python_executable %imex_runner --requires=l0-runtime -i %s --pass-pipeline-file=%p/linalg-to-llvm.pp \
10+
// RUN: --runner imex-cpu-runner -e main \
11+
// RUN: --entry-point-result=void \
12+
// RUN: --shared-libs=%mlir_runner_utils,%mlir_c_runner_utils,%irunner_utils,%levelzero_runtime --filecheck
13+
// RUN: %python_executable %imex_runner --requires=sycl-runtime -i %s --pass-pipeline-file=%p/linalg-to-llvm.pp \
14+
// RUN: --runner imex-cpu-runner -e main \
15+
// RUN: --entry-point-result=void \
16+
// RUN: --shared-libs=%mlir_runner_utils,%mlir_c_runner_utils,%irunner_utils,%sycl_runtime --filecheck
17+
#map0 = affine_map<(d0, d1, d2, d3) -> (d0, d1, d2, d3)>
18+
#map1 = affine_map<(d0, d1, d2, d3, d4, d5, d6) -> (d0, d1 + d4, d2 + d5, d6)>
19+
#map2 = affine_map<(d0, d1, d2, d3, d4, d5, d6) -> (d4, d5, d6, d3)>
20+
#map3 = affine_map<(d0, d1, d2, d3, d4, d5, d6) -> (d0, d1, d2, d3)>
21+
module @convolution {
22+
func.func @test(%arg0: tensor<1x56x56x64x@DTYPE@>, %arg1: tensor<3x3x64x64x@DTYPE@>) -> tensor<1x56x56x64x@DTYPE@> {
23+
%cst = arith.constant 0.000000e+00 : @DTYPE@
24+
%0 = tensor.empty() : tensor<1x56x56x64x@DTYPE@>
25+
%1 = linalg.generic {indexing_maps = [#map0, #map0], iterator_types = ["parallel", "parallel", "parallel", "parallel"]} ins(%arg0 : tensor<1x56x56x64x@DTYPE@>) outs(%0 : tensor<1x56x56x64x@DTYPE@>) {
26+
^bb0(%arg2: @DTYPE@, %arg3: @DTYPE@):
27+
linalg.yield %arg2 : @DTYPE@
28+
} -> tensor<1x56x56x64x@DTYPE@>
29+
%cst_0 = arith.constant 0.000000e+00 : @DTYPE@
30+
%2 = tensor.pad %1 low[0, 1, 1, 0] high[0, 1, 1, 0] {
31+
^bb0(%arg2: index, %arg3: index, %arg4: index, %arg5: index):
32+
tensor.yield %cst_0 : @DTYPE@
33+
} : tensor<1x56x56x64x@DTYPE@> to tensor<1x58x58x64x@DTYPE@>
34+
%3 = tensor.empty() : tensor<1x56x56x64x@DTYPE@>
35+
%4 = linalg.fill ins(%cst : @DTYPE@) outs(%3 : tensor<1x56x56x64x@DTYPE@>) -> tensor<1x56x56x64x@DTYPE@>
36+
%5 = linalg.generic {indexing_maps = [#map1, #map2, #map3], iterator_types = ["parallel", "parallel", "parallel", "parallel", "reduction", "reduction", "reduction"]} ins(%2, %arg1 : tensor<1x58x58x64x@DTYPE@>, tensor<3x3x64x64x@DTYPE@>) outs(%4 : tensor<1x56x56x64x@DTYPE@>) attrs = {iterator_ranges = [1, 56, 56, 64, 3, 3, 64]} {
37+
^bb0(%arg2: @DTYPE@, %arg3: @DTYPE@, %arg4: @DTYPE@):
38+
%6 = arith.mulf %arg2, %arg3 : @DTYPE@
39+
%7 = arith.addf %arg4, %6 : @DTYPE@
40+
linalg.yield %7 : @DTYPE@
41+
} -> tensor<1x56x56x64x@DTYPE@>
42+
return %5 : tensor<1x56x56x64x@DTYPE@>
43+
}
44+
func.func @main() {
45+
%0 = arith.constant dense<1.0> : tensor<1x56x56x64x@DTYPE@>
46+
%1 = arith.constant dense<0.5> : tensor<3x3x64x64x@DTYPE@>
47+
%2 = call @test(%0, %1) : (tensor<1x56x56x64x@DTYPE@>, tensor<3x3x64x64x@DTYPE@>) -> tensor<1x56x56x64x@DTYPE@>
48+
%3 = tensor.extract_slice %2[0, 0, 0, 0][1, 1, 1, 64][1, 1, 1, 1] : tensor<1x56x56x64x@DTYPE@> to tensor<64x@DTYPE@>
49+
%unranked = tensor.cast %3 : tensor<64x@DTYPE@> to tensor<*x@DTYPE@>
50+
%ref = arith.constant dense<[128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0,128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0,128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0,128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0,128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0,128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0,128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0,128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0]>:tensor<64xf32>
51+
%unranked_ref = tensor.cast %ref : tensor<64xf32>to tensor<*xf32>
52+
call @CHECKDTYPE@(%unranked, %unranked_ref) : (tensor<*x@DTYPE@>, tensor<*xf32>) -> ()
53+
call @PRINTDTYPE@(%unranked) : (tensor<*x@DTYPE@>) -> ()
54+
return
55+
// CHECK: [ALLCLOSE: TRUE]
56+
}
57+
func.func private @PRINTDTYPE@(tensor<*x@DTYPE@>)
58+
func.func private @CHECKDTYPE@(tensor<*x@DTYPE@>, tensor<*xf32>)
59+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
// NUMPLACEHOLDERS 3 NUMVARIANTS 2
2+
// PLACEHOLDER DTYPE f16 bf16
3+
// PLACEHOLDER PRINTDTYPE @printMemrefF16 @printMemrefBF16
4+
// PLACEHOLDER CHECKDTYPE @printAllcloseF16 @printAllcloseBF16
5+
// RUN: %python_executable %imex_runner -i %s --pass-pipeline-file=%p/linalg-to-cpu.pp \
6+
// RUN: --runner imex-cpu-runner -e main \
7+
// RUN: --shared-libs=%mlir_runner_utils,%irunner_utils \
8+
// RUN: --entry-point-result=void --filecheck
9+
// RUN: %python_executable %imex_runner --requires=l0-runtime -i %s --pass-pipeline-file=%p/linalg-to-llvm.pp \
10+
// RUN: --runner imex-cpu-runner -e main \
11+
// RUN: --entry-point-result=void \
12+
// RUN: --shared-libs=%mlir_runner_utils,%irunner_utils,%levelzero_runtime --filecheck
13+
// RUN: %python_executable %imex_runner --requires=sycl-runtime -i %s --pass-pipeline-file=%p/linalg-to-llvm.pp \
14+
// RUN: --runner imex-cpu-runner -e main \
15+
// RUN: --entry-point-result=void \
16+
// RUN: --shared-libs=%mlir_runner_utils,%irunner_utils,%sycl_runtime --filecheck
17+
#map0 = affine_map<(d0, d1) -> (d0, d1)>
18+
#map1 = affine_map<(d0, d1, d2) -> (d0, d2)>
19+
#map2 = affine_map<(d0, d1, d2) -> (d2, d1)>
20+
#map3 = affine_map<(d0, d1, d2) -> (d0, d1)>
21+
#map_convert = affine_map<(d0, d1) -> (d0, d1)>
22+
module @dot_f16_acc_f32 {
23+
func.func @test(%arg0: tensor<8x16x@DTYPE@>, %arg1: tensor<16x32x@DTYPE@>) -> tensor<8x32x@DTYPE@> {
24+
%cst = arith.constant 0.000000e+00 : f32
25+
%0 = tensor.empty() : tensor<8x16xf32>
26+
%1 = linalg.generic {indexing_maps = [#map0, #map0], iterator_types = ["parallel", "parallel"]} ins(%arg0 : tensor<8x16x@DTYPE@>) outs(%0 : tensor<8x16xf32>) {
27+
^bb0(%arg2: @DTYPE@, %arg3: f32):
28+
%9 = arith.extf %arg2 : @DTYPE@ to f32
29+
linalg.yield %9 : f32
30+
} -> tensor<8x16xf32>
31+
%2 = tensor.empty() : tensor<16x32xf32>
32+
%3 = linalg.generic {indexing_maps = [#map0, #map0], iterator_types = ["parallel", "parallel"]} ins(%arg1 : tensor<16x32x@DTYPE@>) outs(%2 : tensor<16x32xf32>) {
33+
^bb0(%arg2: @DTYPE@, %arg3: f32):
34+
%9 = arith.extf %arg2 : @DTYPE@ to f32
35+
linalg.yield %9 : f32
36+
} -> tensor<16x32xf32>
37+
%4 = tensor.empty() : tensor<8x32xf32>
38+
%5 = linalg.fill ins(%cst : f32) outs(%4 : tensor<8x32xf32>) -> tensor<8x32xf32>
39+
%6 = linalg.generic {indexing_maps = [#map1, #map2, #map3], iterator_types = ["parallel", "parallel", "reduction"]} ins(%1, %3 : tensor<8x16xf32>, tensor<16x32xf32>) outs(%5 : tensor<8x32xf32>) attrs = {iterator_ranges = [8, 32, 16]} {
40+
^bb0(%arg2: f32, %arg3: f32, %arg4: f32):
41+
%9 = arith.mulf %arg2, %arg3 : f32
42+
%10 = arith.addf %arg4, %9 : f32
43+
linalg.yield %10 : f32
44+
} -> tensor<8x32xf32>
45+
%7 = tensor.empty() : tensor<8x32x@DTYPE@>
46+
%8 = linalg.generic {indexing_maps = [#map0, #map0], iterator_types = ["parallel", "parallel"]} ins(%6 : tensor<8x32xf32>) outs(%7 : tensor<8x32x@DTYPE@>) {
47+
^bb0(%arg2: f32, %arg3: @DTYPE@):
48+
%9 = arith.truncf %arg2 : f32 to @DTYPE@
49+
linalg.yield %9 : @DTYPE@
50+
} -> tensor<8x32x@DTYPE@>
51+
return %8 : tensor<8x32x@DTYPE@>
52+
}
53+
func.func @main() {
54+
%0 = arith.constant dense<1.0> : tensor<8x16x@DTYPE@>
55+
%1 = arith.constant dense<2.0> : tensor<16x32x@DTYPE@>
56+
%2 = call @test(%0, %1) : (tensor<8x16x@DTYPE@>, tensor<16x32x@DTYPE@>) -> tensor<8x32x@DTYPE@>
57+
%3 = tensor.extract_slice %2[0, 0][2, 32][1, 1] : tensor<8x32x@DTYPE@> to tensor<2x32x@DTYPE@>
58+
%unranked = tensor.cast %3 : tensor<2x32x@DTYPE@> to tensor<*x@DTYPE@>
59+
%ref = arith.constant dense<[[32.0, 32.0, 32.0, 32.0, 32.0, 32.0, 32.0, 32.0,32.0, 32.0, 32.0, 32.0, 32.0, 32.0, 32.0, 32.0,32.0, 32.0, 32.0, 32.0, 32.0, 32.0, 32.0, 32.0,32.0, 32.0, 32.0, 32.0, 32.0, 32.0, 32.0, 32.0],
60+
[32.0, 32.0, 32.0, 32.0, 32.0, 32.0, 32.0, 32.0,32.0, 32.0, 32.0, 32.0, 32.0, 32.0, 32.0, 32.0,32.0, 32.0, 32.0, 32.0, 32.0, 32.0, 32.0, 32.0,32.0, 32.0, 32.0, 32.0, 32.0, 32.0, 32.0, 32.0]]>:tensor<2x32xf32>
61+
%unranked_ref = tensor.cast %ref : tensor<2x32xf32>to tensor<*xf32>
62+
call @CHECKDTYPE@(%unranked, %unranked_ref) : (tensor<*x@DTYPE@>, tensor<*xf32>) -> ()
63+
return
64+
// CHECK: [ALLCLOSE: TRUE]
65+
}
66+
func.func private @CHECKDTYPE@(tensor<*x@DTYPE@>, tensor<*xf32>)
67+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
// NUMPLACEHOLDERS 2 NUMVARIANTS 3
2+
// PLACEHOLDER DTYPE f32 f16 bf16
3+
// PLACEHOLDER NEGINF 0xFF800000 0xFC00 0xFF80
4+
// RUN: %python_executable %imex_runner -i %s --pass-pipeline-file=%p/linalg-to-cpu.pp \
5+
// RUN: --runner imex-cpu-runner -e main \
6+
// RUN: --shared-libs=%mlir_runner_utils,%irunner_utils \
7+
// RUN: --entry-point-result=void --filecheck
8+
// RUN: %python_executable %imex_runner --requires=l0-runtime -i %s --pass-pipeline-file=%p/linalg-to-llvm.pp \
9+
// RUN: --runner imex-cpu-runner -e main \
10+
// RUN: --entry-point-result=void \
11+
// RUN: --shared-libs=%mlir_runner_utils,%irunner_utils,%levelzero_runtime --filecheck
12+
// RUN: %python_executable %imex_runner --requires=sycl-runtime -i %s --pass-pipeline-file=%p/linalg-to-llvm.pp \
13+
// RUN: --runner imex-cpu-runner -e main \
14+
// RUN: --entry-point-result=void \
15+
// RUN: --shared-libs=%mlir_runner_utils,%irunner_utils,%sycl_runtime --filecheck
16+
#map0 = affine_map<(d0, d1, d2, d3) -> (d0, d1, d2, d3)>
17+
#map1 = affine_map<(d0, d1, d2, d3) -> ()>
18+
#map2 = affine_map<() -> ()>
19+
module @argmax {
20+
func.func @main() {
21+
%0= arith.constant dense<[[[[9.0, 8.0, 0.0], [1.0, 5.0, 0.0], [1.0, 1.0, 7.0], [8.0, 2.0, 2.0]], [[8.0, 0.0, 4.0], [7.0, 5.0, 5.0], [8.0, 2.0, 0.0], [0.0, 9.0, 5.0]], [[4.0, 7.0, 2.0], [4.0, 5.0, 1.0], [3.0, 3.0, 6.0], [8.0, 0.0, 1.0]], [[2.0, 8.0, 4.0], [0.0, 5.0, 5.0], [6.0, 1.0, 1.0], [3.0, 3.0, 1.0]]]]>:tensor<1x4x4x3x@DTYPE@>
22+
%1 = call @test(%0) : (tensor<1x4x4x3x@DTYPE@>) -> tensor<i32>
23+
%unranked = tensor.cast %1 : tensor<i32>to tensor<*xi32>
24+
call @printMemrefI32(%unranked) : (tensor<*xi32>) -> ()
25+
return
26+
}
27+
func.func private @printMemrefI32(tensor<*xi32>)
28+
func.func @test(%arg0: tensor<1x4x4x3x@DTYPE@>)->tensor<i32>{
29+
%c0_i32 = arith.constant 0 : i32
30+
%cst = arith.constant @NEGINF@ : @DTYPE@
31+
%0 = tensor.empty() : tensor<@DTYPE@>
32+
%1 = linalg.fill ins(%cst : @DTYPE@) outs(%0 : tensor<@DTYPE@>) -> tensor<@DTYPE@>
33+
%2 = linalg.generic {indexing_maps = [#map0, #map1], iterator_types = ["reduction", "reduction", "reduction", "reduction"]} ins(%arg0 : tensor<1x4x4x3x@DTYPE@>) outs(%1 : tensor<@DTYPE@>) attrs = {iterator_ranges = [1, 4, 4, 3], name = "argmax"} {
34+
^bb0(%arg1: @DTYPE@, %arg2: @DTYPE@):
35+
%10 = arith.cmpf ogt, %arg2, %arg1 : @DTYPE@
36+
%11 = arith.select %10, %arg2, %arg1 : @DTYPE@
37+
linalg.yield %11 : @DTYPE@
38+
} -> tensor<@DTYPE@>
39+
%3 = tensor.empty() : tensor<1x4x4x3xi32>
40+
%4 = linalg.generic {indexing_maps = [#map0], iterator_types = ["parallel", "parallel", "parallel", "parallel"]} outs(%3 : tensor<1x4x4x3xi32>) {
41+
^bb0(%arg1: i32):
42+
%10 = linalg.index 0 : index
43+
%11 = arith.index_cast %10 : index to i32
44+
linalg.yield %11 : i32
45+
} -> tensor<1x4x4x3xi32>
46+
%5 = tensor.empty() : tensor<i32>
47+
%6 = linalg.fill ins(%c0_i32 : i32) outs(%5 : tensor<i32>) -> tensor<i32>
48+
%7 = linalg.generic {indexing_maps = [#map0, #map1, #map0, #map1], iterator_types = ["reduction", "reduction", "reduction", "reduction"]} ins(%arg0, %2, %4 : tensor<1x4x4x3x@DTYPE@>, tensor<@DTYPE@>, tensor<1x4x4x3xi32>) outs(%6 : tensor<i32>) attrs = {iterator_ranges = [1, 4, 4, 3], name = "argmax"} {
49+
^bb0(%arg1: @DTYPE@, %arg2: @DTYPE@, %arg3: i32, %arg4: i32):
50+
%10 = arith.cmpf oeq, %arg1, %arg2 : @DTYPE@
51+
%c0_i32_0 = arith.constant 0 : i32
52+
%11 = arith.select %10, %arg3, %c0_i32_0 : i32
53+
%12 = arith.cmpi ugt, %arg4, %11 : i32
54+
%13 = arith.select %12, %arg4, %11 : i32
55+
linalg.yield %13 : i32
56+
} -> tensor<i32>
57+
%8 = tensor.empty() : tensor<i32>
58+
%9 = linalg.generic {indexing_maps = [#map2, #map2], iterator_types = []} ins(%7 : tensor<i32>) outs(%8 : tensor<i32>) {
59+
^bb0(%arg1: i32, %arg2: i32):
60+
linalg.yield %arg1 : i32
61+
} -> tensor<i32>
62+
return %9 : tensor<i32>
63+
}
64+
}
65+
// CHECK: Unranked Memref base@ = {{0x[-9a-f]*}}
66+
// CHECK-SAME: rank = {{.}} offset = {{.}} sizes = [] strides = {{.*}} data =
67+
// CHECK: 0
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// NUMPLACEHOLDERS 3 NUMVARIANTS 3
2+
// PLACEHOLDER DTYPE f32 f16 bf16
3+
// PLACEHOLDER PRINTDTYPE @printMemrefF32 @printMemrefF16 @printMemrefBF16
4+
// PLACEHOLDER CHECKDTYPE @printAllcloseF32 @printAllcloseF16 @printAllcloseBF16
5+
// RUN: %python_executable %imex_runner -i %s --pass-pipeline-file=%p/linalg-to-cpu.pp \
6+
// RUN: --runner imex-cpu-runner -e main \
7+
// RUN: --shared-libs=%mlir_runner_utils,%irunner_utils \
8+
// RUN: --entry-point-result=void --filecheck
9+
// RUN: %python_executable %imex_runner --requires=l0-runtime -i %s --pass-pipeline-file=%p/linalg-to-llvm.pp \
10+
// RUN: --runner imex-cpu-runner -e main \
11+
// RUN: --entry-point-result=void \
12+
// RUN: --shared-libs=%mlir_runner_utils,%irunner_utils,%levelzero_runtime --filecheck
13+
// RUN: %python_executable %imex_runner --requires=sycl-runtime -i %s --pass-pipeline-file=%p/linalg-to-llvm.pp \
14+
// RUN: --runner imex-cpu-runner -e main \
15+
// RUN: --entry-point-result=void \
16+
// RUN: --shared-libs=%mlir_runner_utils,%irunner_utils,%sycl_runtime --filecheck
17+
#map0 = affine_map<(d0, d1) -> (d0)>
18+
#map1 = affine_map<(d0, d1) -> (d0, d1)>
19+
module @broadcast_non_numpy {
20+
func.func @test(%arg0: tensor<3x@DTYPE@>) -> tensor<3x4x@DTYPE@> {
21+
%cst = arith.constant 0.000000e+00 : @DTYPE@
22+
%0 = tensor.empty() : tensor<3x4x@DTYPE@>
23+
%1 = linalg.fill ins(%cst : @DTYPE@) outs(%0 : tensor<3x4x@DTYPE@>) -> tensor<3x4x@DTYPE@>
24+
%2 = linalg.generic {indexing_maps = [#map0, #map1], iterator_types = ["parallel", "parallel"]} ins(%arg0 : tensor<3x@DTYPE@>) outs(%1 : tensor<3x4x@DTYPE@>) attrs = {iterator_ranges = [3, 4], name = "broadcast"} {
25+
^bb0(%arg1: @DTYPE@, %arg2: @DTYPE@):
26+
linalg.yield %arg1 : @DTYPE@
27+
} -> tensor<3x4x@DTYPE@>
28+
return %2 : tensor<3x4x@DTYPE@>
29+
}
30+
func.func @main() {
31+
%0 = arith.constant dense<[1.0, 2.0, 3.0]> : tensor<3x@DTYPE@>
32+
%2 = call @test(%0) : (tensor<3x@DTYPE@>) -> tensor<3x4x@DTYPE@>
33+
%unranked = tensor.cast %2 : tensor<3x4x@DTYPE@> to tensor<*x@DTYPE@>
34+
%ref = arith.constant dense<[
35+
[1.0, 1.0, 1.0, 1.0],
36+
[2.0, 2.0, 2.0, 2.0],
37+
[3.0, 3.0, 3.0, 3.0]
38+
]>:tensor<3x4xf32>
39+
%unranked_ref = tensor.cast %ref : tensor<3x4xf32>to tensor<*xf32>
40+
call @CHECKDTYPE@(%unranked, %unranked_ref) : (tensor<*x@DTYPE@>, tensor<*xf32>) -> ()
41+
call @PRINTDTYPE@(%unranked) : (tensor<*x@DTYPE@>) -> ()
42+
return
43+
}
44+
func.func private @PRINTDTYPE@(tensor<*x@DTYPE@>)
45+
func.func private @CHECKDTYPE@(tensor<*x@DTYPE@>, tensor<*xf32>)
46+
}
47+
// CHECK: [ALLCLOSE: TRUE]

0 commit comments

Comments
 (0)