|
1 | 1 | // RUN: mlir-translate --no-implicit-module --test-spirv-roundtrip %s | FileCheck %s
|
2 |
| -// DISABLED: %if spirv-tools %{ mlir-translate --no-implicit-module --serialize-spirv %s | spirv-val %} |
3 |
| - |
4 |
| -// FIXME(#152012): Fix arm tensor constant validation errors and reenable spirv-val tests. |
| 2 | +// RUN: %if spirv-tools %{ mlir-translate --no-implicit-module --serialize-spirv %s | spirv-val %} |
5 | 3 |
|
6 | 4 | spirv.module Logical Vulkan requires #spirv.vce<v1.3,
|
7 | 5 | [VulkanMemoryModel, Shader, TensorsARM, Linkage], [SPV_KHR_vulkan_memory_model, SPV_ARM_tensors]> {
|
8 |
| - // CHECK-LABEL: @arm_tensor_of_i32 |
9 |
| - spirv.func @arm_tensor_of_i32() -> (!spirv.arm.tensor<2x3xi32>) "None" { |
| 6 | + // CHECK-LABEL: @rank_1_arm_tensor_of_i32 |
| 7 | + spirv.func @rank_1_arm_tensor_of_i32() -> (!spirv.arm.tensor<3xi32>) "None" { |
| 8 | + // CHECK: {{%.*}} = spirv.Constant dense<[1, 2, 3]> : !spirv.arm.tensor<3xi32> |
| 9 | + %0 = spirv.Constant dense<[1, 2, 3]> : !spirv.arm.tensor<3xi32> |
| 10 | + spirv.ReturnValue %0 : !spirv.arm.tensor<3xi32> |
| 11 | + } |
| 12 | + |
| 13 | + // CHECK-LABEL: @rank_2_arm_tensor_of_i32 |
| 14 | + spirv.func @rank_2_arm_tensor_of_i32() -> (!spirv.arm.tensor<2x3xi32>) "None" { |
10 | 15 | // CHECK: {{%.*}} = spirv.Constant dense<{{\[}}[1, 2, 3], [4, 5, 6]]> : !spirv.arm.tensor<2x3xi32>
|
11 | 16 | %0 = spirv.Constant dense<[[1, 2, 3], [4, 5, 6]]> : !spirv.arm.tensor<2x3xi32>
|
12 | 17 | spirv.ReturnValue %0 : !spirv.arm.tensor<2x3xi32>
|
13 | 18 | }
|
14 | 19 |
|
| 20 | + // CHECK-LABEL: @rank_3_arm_tensor_of_i32 |
| 21 | + spirv.func @rank_3_arm_tensor_of_i32() -> (!spirv.arm.tensor<2x2x3xi32>) "None" { |
| 22 | + // CHECK: {{%.*}} = spirv.Constant dense<{{\[}}{{\[}}[1, 2, 3], [4, 5, 6]], {{\[}}[7, 8, 9], [10, 11, 12]]]> : !spirv.arm.tensor<2x2x3xi32> |
| 23 | + %0 = spirv.Constant dense<[[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]> : !spirv.arm.tensor<2x2x3xi32> |
| 24 | + spirv.ReturnValue %0 : !spirv.arm.tensor<2x2x3xi32> |
| 25 | + } |
| 26 | + |
| 27 | + // CHECK-LABEL: @rank_4_arm_tensor_of_i32 |
| 28 | + spirv.func @rank_4_arm_tensor_of_i32() -> (!spirv.arm.tensor<2x3x4x5xi32>) "None" { |
| 29 | + // CHECK: {{%.*}} = spirv.Constant dense<5> : !spirv.arm.tensor<2x3x4x5xi32> |
| 30 | + %0 = spirv.Constant dense<5> : !spirv.arm.tensor<2x3x4x5xi32> |
| 31 | + spirv.ReturnValue %0 : !spirv.arm.tensor<2x3x4x5xi32> |
| 32 | + } |
| 33 | + |
15 | 34 | // CHECK-LABEL: @splat_arm_tensor_of_i32
|
16 | 35 | spirv.func @splat_arm_tensor_of_i32() -> (!spirv.arm.tensor<2x3xi32>) "None" {
|
17 | 36 | // CHECK: {{%.*}} = spirv.Constant dense<2> : !spirv.arm.tensor<2x3xi32>
|
18 | 37 | %0 = spirv.Constant dense<2> : !spirv.arm.tensor<2x3xi32>
|
19 | 38 | spirv.ReturnValue %0 : !spirv.arm.tensor<2x3xi32>
|
20 | 39 | }
|
21 | 40 |
|
22 |
| - // CHECK-LABEL: @arm_tensor_of_f32 |
23 |
| - spirv.func @arm_tensor_of_f32() -> (!spirv.arm.tensor<2x3xf32>) "None" { |
| 41 | + // CHECK-LABEL: @rank_1_arm_tensor_of_f32 |
| 42 | + spirv.func @rank_1_arm_tensor_of_f32() -> (!spirv.arm.tensor<3xf32>) "None" { |
| 43 | + // CHECK: {{%.*}} = spirv.Constant dense<[1.000000e+00, 2.000000e+00, 3.000000e+00]> : !spirv.arm.tensor<3xf32> |
| 44 | + %0 = spirv.Constant dense<[1.0, 2.0, 3.0]> : !spirv.arm.tensor<3xf32> |
| 45 | + spirv.ReturnValue %0 : !spirv.arm.tensor<3xf32> |
| 46 | + } |
| 47 | + |
| 48 | + // CHECK-LABEL: @rank_2_arm_tensor_of_f32 |
| 49 | + spirv.func @rank_2_arm_tensor_of_f32() -> (!spirv.arm.tensor<2x3xf32>) "None" { |
24 | 50 | // CHECK: {{%.*}} = spirv.Constant dense<{{\[}}[1.000000e+00, 2.000000e+00, 3.000000e+00], [4.000000e+00, 5.000000e+00, 6.000000e+00]]> : !spirv.arm.tensor<2x3xf32>
|
25 |
| - %0 = spirv.Constant dense<[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]>: !spirv.arm.tensor<2x3xf32> |
| 51 | + %0 = spirv.Constant dense<[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]> : !spirv.arm.tensor<2x3xf32> |
26 | 52 | spirv.ReturnValue %0 : !spirv.arm.tensor<2x3xf32>
|
27 | 53 | }
|
28 | 54 |
|
| 55 | + // CHECK-LABEL: @rank_3_arm_tensor_of_f32 |
| 56 | + spirv.func @rank_3_arm_tensor_of_f32() -> (!spirv.arm.tensor<2x2x3xf32>) "None" { |
| 57 | + // CHECK: {{%.*}} = spirv.Constant dense<{{\[}}{{\[}}[1.000000e+00, 2.000000e+00, 3.000000e+00], [4.000000e+00, 5.000000e+00, 6.000000e+00]], {{\[}}[7.000000e+00, 8.000000e+00, 9.000000e+00], [1.000000e+01, 1.100000e+01, 1.200000e+01]]]> : !spirv.arm.tensor<2x2x3xf32> |
| 58 | + %0 = spirv.Constant dense<[[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]], [[7.0, 8.0, 9.0], [10.0, 11.0, 12.0]]]> : !spirv.arm.tensor<2x2x3xf32> |
| 59 | + spirv.ReturnValue %0 : !spirv.arm.tensor<2x2x3xf32> |
| 60 | + } |
| 61 | + |
| 62 | + // CHECK-LABEL: @rank_4_arm_tensor_of_f32 |
| 63 | + spirv.func @rank_4_arm_tensor_of_f32() -> (!spirv.arm.tensor<2x3x4x5xf32>) "None" { |
| 64 | + // CHECK: {{%.*}} = spirv.Constant dense<5.000000e+00> : !spirv.arm.tensor<2x3x4x5xf32> |
| 65 | + %0 = spirv.Constant dense<5.0> : !spirv.arm.tensor<2x3x4x5xf32> |
| 66 | + spirv.ReturnValue %0 : !spirv.arm.tensor<2x3x4x5xf32> |
| 67 | + } |
| 68 | + |
29 | 69 | // CHECK-LABEL: @splat_arm_tensor_of_f32
|
30 | 70 | spirv.func @splat_arm_tensor_of_f32() -> (!spirv.arm.tensor<2x3xf32>) "None" {
|
31 | 71 | // CHECK: {{%.*}} = spirv.Constant dense<2.000000e+00> : !spirv.arm.tensor<2x3xf32>
|
|
0 commit comments