136 lines · plain
1 2// RUN: mlir-translate --no-implicit-module --test-spirv-roundtrip %s | FileCheck %s3// RUN: %if spirv-tools %{ mlir-translate --no-implicit-module --serialize-spirv %s | spirv-val %}4 5// Note: Since the output of this test (optionally) gets validated by spirv-val,6// we cannot use splits.7 8spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader, ReplicatedCompositesEXT, TensorsARM, Linkage],9 [SPV_EXT_replicated_composites, SPV_ARM_tensors]> {10 // CHECK-LABEL: @splat_vector_i3211 spirv.func @splat_vector_i32() -> (vector<3xi32>) "None" {12 // CHECK: spirv.EXT.ConstantCompositeReplicate [1 : i32] : vector<3xi32>13 %1 = spirv.EXT.ConstantCompositeReplicate [1 : i32] : vector<3xi32>14 spirv.ReturnValue %1 : vector<3xi32>15 }16 17 // CHECK-LABEL: @splat_array_of_i3218 spirv.func @splat_array_of_i32() -> (!spirv.array<3 x i32>) "None" {19 // CHECK: spirv.EXT.ConstantCompositeReplicate [1 : i32] : !spirv.array<3 x i32>20 %1 = spirv.EXT.ConstantCompositeReplicate [1 : i32] : !spirv.array<3 x i32>21 spirv.ReturnValue %1 : !spirv.array<3 x i32>22 }23 24 // CHECK-LABEL: @splat_array_of_vectors_of_i3225 spirv.func @splat_array_of_vectors_of_i32() -> (!spirv.array<3 x vector<2xi32>>) "None" {26 // CHECK: spirv.EXT.ConstantCompositeReplicate [dense<[1, 2]> : vector<2xi32>] : !spirv.array<3 x vector<2xi32>>27 %0 = spirv.EXT.ConstantCompositeReplicate [dense<[1, 2]> : vector<2xi32>] : !spirv.array<3 x vector<2xi32>>28 spirv.ReturnValue %0 : !spirv.array<3 x vector<2xi32>>29 }30 31 // CHECK-LABEL: @splat_array_of_splat_array_of_i3232 spirv.func @splat_array_of_splat_array_of_i32() -> (!spirv.array<2 x !spirv.array<3 x i32>>) "None" {33 // CHECK: %0 = spirv.EXT.ConstantCompositeReplicate [3 : i32] : !spirv.array<2 x !spirv.array<3 x i32>>34 %0 = spirv.EXT.ConstantCompositeReplicate [3 : i32] : !spirv.array<2 x !spirv.array<3 x i32>>35 spirv.ReturnValue %0 : !spirv.array<2 x !spirv.array<3 x i32>>36 }37 38 // CHECK-LABEL: @splat_array_of_non_splat_array_of_i3239 spirv.func @splat_array_of_non_splat_array_of_i32() -> (!spirv.array<2 x !spirv.array<3 x i32>>) "None" {40 // CHECK: %0 = spirv.EXT.ConstantCompositeReplicate {{\[}}[1 : i32, 2 : i32, 3 : i32]] : !spirv.array<2 x !spirv.array<3 x i32>>41 %0 = spirv.EXT.ConstantCompositeReplicate [[1 : i32, 2 : i32, 3 : i32]] : !spirv.array<2 x !spirv.array<3 x i32>>42 spirv.ReturnValue %0 : !spirv.array<2 x !spirv.array<3 x i32>>43 }44 45 // CHECK-LABEL: @splat_array_of_splat_vectors_of_i3246 spirv.func @splat_array_of_splat_vectors_of_i32() -> (!spirv.array<2 x vector<2xi32>>) "None" {47 // CHECK: spirv.EXT.ConstantCompositeReplicate [2 : i32] : !spirv.array<2 x vector<2xi32>>48 %0 = spirv.EXT.ConstantCompositeReplicate [2 : i32] : !spirv.array<2 x vector<2xi32>>49 spirv.ReturnValue %0 : !spirv.array<2 x vector<2xi32>>50 }51 52 // CHECK-LABEL: @splat_arm_tensor_of_i3253 spirv.func @splat_arm_tensor_of_i32() -> (!spirv.arm.tensor<2x3xi32>) "None" {54 // CHECK: spirv.EXT.ConstantCompositeReplicate [2 : i32] : !spirv.arm.tensor<2x3xi32>55 %0 = spirv.EXT.ConstantCompositeReplicate [2 : i32] : !spirv.arm.tensor<2x3xi32>56 spirv.ReturnValue %0 : !spirv.arm.tensor<2x3xi32>57 }58 59 // CHECK-LABEL: @splat_array_of_non_splat_array_of_arrays_of_i3260 spirv.func @splat_array_of_non_splat_array_of_arrays_of_i32() -> !spirv.array<2 x !spirv.array<2 x !spirv.array<3 x i32>>> "None" {61 // CHECK: spirv.EXT.ConstantCompositeReplicate {{\[}}{{\[}}[1 : i32, 2 : i32, 3 : i32], [4 : i32, 5 : i32, 6 : i32]]] : !spirv.array<2 x !spirv.array<2 x !spirv.array<3 x i32>>>62 %0 = spirv.EXT.ConstantCompositeReplicate [[[1 : i32, 2 : i32, 3 : i32], [4 : i32, 5 : i32, 6 : i32]]] : !spirv.array<2 x !spirv.array<2 x !spirv.array<3 x i32>>>63 spirv.ReturnValue %0 : !spirv.array<2 x !spirv.array<2 x !spirv.array<3 x i32>>>64 }65 66 // CHECK-LABEL: @null_cc_arm_tensor_of_i3267 spirv.func @null_cc_arm_tensor_of_i32() -> (!spirv.arm.tensor<2x3xi32>) "None" {68 // CHECK: spirv.Constant dense<0> : !spirv.arm.tensor<2x3xi32>69 %0 = spirv.EXT.ConstantCompositeReplicate [0 : i32] : !spirv.arm.tensor<2x3xi32>70 spirv.ReturnValue %0 : !spirv.arm.tensor<2x3xi32>71 }72 73 // CHECK-LABEL: @splat_vector_f3274 spirv.func @splat_vector_f32() -> (vector<3xf32>) "None" {75 // CHECK: spirv.EXT.ConstantCompositeReplicate [1.000000e+00 : f32] : vector<3xf32>76 %1 = spirv.EXT.ConstantCompositeReplicate [1.0 : f32] : vector<3xf32>77 spirv.ReturnValue %1 : vector<3xf32>78 }79 80 // CHECK-LABEL: @splat_array_of_f3281 spirv.func @splat_array_of_f32() -> (!spirv.array<3 x f32>) "None" {82 // CHECK: spirv.EXT.ConstantCompositeReplicate [1.000000e+00 : f32] : !spirv.array<3 x f32>83 %1 = spirv.EXT.ConstantCompositeReplicate [1.0 : f32] : !spirv.array<3 x f32>84 spirv.ReturnValue %1 : !spirv.array<3 x f32>85 }86 87 // CHECK-LABEL: @splat_array_of_splat_array_of_f3288 spirv.func @splat_array_of_splat_array_of_f32() -> (!spirv.array<2 x !spirv.array<3 x f32>>) "None" {89 // CHECK: %0 = spirv.EXT.ConstantCompositeReplicate [3.000000e+00 : f32] : !spirv.array<2 x !spirv.array<3 x f32>>90 %0 = spirv.EXT.ConstantCompositeReplicate [3.0 : f32] : !spirv.array<2 x !spirv.array<3 x f32>>91 spirv.ReturnValue %0 : !spirv.array<2 x !spirv.array<3 x f32>>92 }93 94 // CHECK-LABEL: @splat_array_of_non_splat_array_of_f3295 spirv.func @splat_array_of_non_splat_array_of_f32() -> (!spirv.array<2 x !spirv.array<3 x f32>>) "None" {96 // CHECK: %0 = spirv.EXT.ConstantCompositeReplicate {{\[}}[1.000000e+00 : f32, 2.000000e+00 : f32, 3.000000e+00 : f32]] : !spirv.array<2 x !spirv.array<3 x f32>>97 %0 = spirv.EXT.ConstantCompositeReplicate [[1.0 : f32, 2.0 : f32, 3.0 : f32]] : !spirv.array<2 x !spirv.array<3 x f32>>98 spirv.ReturnValue %0 : !spirv.array<2 x !spirv.array<3 x f32>>99 }100 101 // CHECK-LABEL: @splat_array_of_vectors_of_f32102 spirv.func @splat_array_of_vectors_of_f32() -> (!spirv.array<3 x vector<2xf32>>) "None" {103 // CHECK: spirv.EXT.ConstantCompositeReplicate [dense<[1.000000e+00, 2.000000e+00]> : vector<2xf32>] : !spirv.array<3 x vector<2xf32>>104 %0 = spirv.EXT.ConstantCompositeReplicate [dense<[1.0, 2.0]> : vector<2xf32>] : !spirv.array<3 x vector<2xf32>>105 spirv.ReturnValue %0 : !spirv.array<3 x vector<2xf32>>106 }107 108 // CHECK-LABEL: @splat_array_of_splat_vectors_of_f32109 spirv.func @splat_array_of_splat_vectors_of_f32() -> (!spirv.array<2 x vector<2xf32>>) "None" {110 // CHECK: spirv.EXT.ConstantCompositeReplicate [2.000000e+00 : f32] : !spirv.array<2 x vector<2xf32>>111 %0 = spirv.EXT.ConstantCompositeReplicate [2.0 : f32] : !spirv.array<2 x vector<2xf32>>112 spirv.ReturnValue %0 : !spirv.array<2 x vector<2xf32>>113 }114 115 // CHECK-LABEL: @splat_arm_tensor_of_f32116 spirv.func @splat_arm_tensor_of_f32() -> (!spirv.arm.tensor<2x3xf32>) "None" {117 // CHECK: spirv.EXT.ConstantCompositeReplicate [2.000000e+00 : f32] : !spirv.arm.tensor<2x3xf32>118 %0 = spirv.EXT.ConstantCompositeReplicate [2.0 : f32] : !spirv.arm.tensor<2x3xf32>119 spirv.ReturnValue %0 : !spirv.arm.tensor<2x3xf32>120 }121 122 // CHECK-LABEL: @splat_array_of_non_splat_array_of_arrays_of_f32123 spirv.func @splat_array_of_non_splat_array_of_arrays_of_f32() -> !spirv.array<2 x !spirv.array<2 x !spirv.array<3 x f32>>> "None" {124 // CHECK: spirv.EXT.ConstantCompositeReplicate {{\[}}{{\[}}[1.000000e+00 : f32, 2.000000e+00 : f32, 3.000000e+00 : f32], [4.000000e+00 : f32, 5.000000e+00 : f32, 6.000000e+00 : f32]]] : !spirv.array<2 x !spirv.array<2 x !spirv.array<3 x f32>>>125 %0 = spirv.EXT.ConstantCompositeReplicate [[[1.0 : f32, 2.0 : f32, 3.0 : f32], [4.0 : f32, 5.0 : f32, 6.0 : f32]]] : !spirv.array<2 x !spirv.array<2 x !spirv.array<3 x f32>>>126 spirv.ReturnValue %0 : !spirv.array<2 x !spirv.array<2 x !spirv.array<3 x f32>>>127 }128 129 // CHECK-LABEL: @null_cc_arm_tensor_of_f32130 spirv.func @null_cc_arm_tensor_of_f32() -> (!spirv.arm.tensor<2x3xf32>) "None" {131 // CHECK: spirv.Constant dense<0.000000e+00> : !spirv.arm.tensor<2x3xf32>132 %0 = spirv.EXT.ConstantCompositeReplicate [0.0 : f32] : !spirv.arm.tensor<2x3xf32>133 spirv.ReturnValue %0 : !spirv.arm.tensor<2x3xf32>134 }135}136