@@ -49,6 +49,36 @@ spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader, ReplicatedCompos
4949 spirv.ReturnValue %0 : !spirv.arm.tensor <2 x3 xi32 >
5050 }
5151
52+ spirv.func @array_of_splat_array_of_non_splat_vectors_of_i32 () -> (!spirv.array <1 x !spirv.array <2 x vector <2 xi32 >>>) " None" {
53+ // CHECK: {{%.*}} = spirv.EXT.ConstantCompositeReplicate [dense<[1, 2]> : vector<2xi32>] : !spirv.array<1 x !spirv.array<2 x vector<2xi32>>
54+ %0 = spirv.Constant [[dense <[1 , 2 ]> : vector <2 xi32 >, dense <[1 , 2 ]> : vector <2 xi32 >]] : !spirv.array <1 x !spirv.array <2 x vector <2 xi32 >>>
55+ spirv.ReturnValue %0 : !spirv.array <1 x !spirv.array <2 x vector <2 xi32 >>>
56+ }
57+
58+ spirv.func @array_of_one_splat_array_of_vector_of_one_i32 () -> !spirv.array <1 x !spirv.array <2 x vector <1 xi32 >>> " None" {
59+ // CHECK: {{%.*}} = spirv.EXT.ConstantCompositeReplicate [dense<1> : vector<1xi32>] : !spirv.array<1 x !spirv.array<2 x vector<1xi32>
60+ %cst = spirv.Constant [[dense <1 > : vector <1 xi32 >], [dense <1 > : vector <1 xi32 >]] : !spirv.array <1 x !spirv.array <2 x vector <1 xi32 >>>
61+ spirv.ReturnValue %cst : !spirv.array <1 x !spirv.array <2 x vector <1 xi32 >>>
62+ }
63+
64+ spirv.func @splat_array_of_array_of_one_vector_of_one_i32 () -> (!spirv.array <2 x !spirv.array <1 x vector <1 xi32 >>>) " None" {
65+ // CHECK: {{%.*}} = spirv.EXT.ConstantCompositeReplicate [dense<1> : vector<1xi32>] : !spirv.array<2 x !spirv.array<1 x vector<1xi32>>>
66+ %0 = spirv.Constant [[dense <1 > : vector <1 xi32 >], [dense <1 > : vector <1 xi32 >]] : !spirv.array <2 x !spirv.array <1 x vector <1 xi32 >>>
67+ spirv.ReturnValue %0 : !spirv.array <2 x !spirv.array <1 x vector <1 xi32 >>>
68+ }
69+
70+ spirv.func @array_of_one_array_of_one_splat_vector_of_i32 () -> (!spirv.array <1 x !spirv.array <1 x vector <2 xi32 >>>) " None" {
71+ // CHECK: {{%.*}} = spirv.EXT.ConstantCompositeReplicate [1 : i32] : !spirv.array<1 x !spirv.array<1 x vector<2xi32>>>
72+ %0 = spirv.Constant [[dense <1 > : vector <2 xi32 >]] : !spirv.array <1 x !spirv.array <1 x vector <2 xi32 >>>
73+ spirv.ReturnValue %0 : !spirv.array <1 x !spirv.array <1 x vector <2 xi32 >>>
74+ }
75+
76+ spirv.func @splat_array_of_splat_array_of_non_splat_array_of_i32 () -> (!spirv.array <2 x !spirv.array <2 x !spirv.array <3 x i32 >>>) " None" {
77+ // CHECK: {{%.*}} = spirv.EXT.ConstantCompositeReplicate {{\[}}[1 : i32, 2 : i32, 3 : i32]] : !spirv.array<2 x !spirv.array<2 x !spirv.array<3 x i32>>>
78+ %0 = spirv.Constant [[[1 : i32 , 2 : i32 , 3 : i32 ], [1 : i32 , 2 : i32 , 3 : i32 ]], [[1 : i32 , 2 : i32 , 3 : i32 ], [1 : i32 , 2 : i32 , 3 : i32 ]]] : !spirv.array <2 x !spirv.array <2 x !spirv.array <3 x i32 >>>
79+ spirv.ReturnValue %0 : !spirv.array <2 x !spirv.array <2 x !spirv.array <3 x i32 >>>
80+ }
81+
5282 spirv.func @splat_vector_of_f32 () -> (vector <3 xf32 >) " None" {
5383 // CHECK: {{%.*}} = spirv.EXT.ConstantCompositeReplicate [2.000000e+00 : f32] : vector<3xf32>
5484 %0 = spirv.Constant dense <2.0 > : vector <3 xf32 >
@@ -97,6 +127,36 @@ spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader, ReplicatedCompos
97127 spirv.ReturnValue %0 : !spirv.arm.tensor <2 x3 xf32 >
98128 }
99129
130+ spirv.func @array_of_splat_array_of_non_splat_vectors_of_f32 () -> (!spirv.array <1 x !spirv.array <2 x vector <2 xf32 >>>) " None" {
131+ // CHECK: {{%.*}} = spirv.EXT.ConstantCompositeReplicate [dense<[1.000000e+00, 2.000000e+00]> : vector<2xf32>] : !spirv.array<1 x !spirv.array<2 x vector<2xf32>>
132+ %0 = spirv.Constant [[dense <[1.0 , 2.0 ]> : vector <2 xf32 >, dense <[1.0 , 2.0 ]> : vector <2 xf32 >]] : !spirv.array <1 x !spirv.array <2 x vector <2 xf32 >>>
133+ spirv.ReturnValue %0 : !spirv.array <1 x !spirv.array <2 x vector <2 xf32 >>>
134+ }
135+
136+ spirv.func @array_of_one_splat_array_of_vector_of_one_f32 () -> !spirv.array <1 x !spirv.array <2 x vector <1 xf32 >>> " None" {
137+ // CHECK: {{%.*}} = spirv.EXT.ConstantCompositeReplicate [dense<1.000000e+00> : vector<1xf32>] : !spirv.array<1 x !spirv.array<2 x vector<1xf32>
138+ %cst = spirv.Constant [[dense <1.0 > : vector <1 xf32 >], [dense <1.0 > : vector <1 xf32 >]] : !spirv.array <1 x !spirv.array <2 x vector <1 xf32 >>>
139+ spirv.ReturnValue %cst : !spirv.array <1 x !spirv.array <2 x vector <1 xf32 >>>
140+ }
141+
142+ spirv.func @splat_array_of_array_of_one_vector_of_one_f32 () -> (!spirv.array <2 x !spirv.array <1 x vector <1 xf32 >>>) " None" {
143+ // CHECK: {{%.*}} = spirv.EXT.ConstantCompositeReplicate [dense<1.000000e+00> : vector<1xf32>] : !spirv.array<2 x !spirv.array<1 x vector<1xf32>>>
144+ %0 = spirv.Constant [[dense <1.0 > : vector <1 xf32 >], [dense <1.0 > : vector <1 xf32 >]] : !spirv.array <2 x !spirv.array <1 x vector <1 xf32 >>>
145+ spirv.ReturnValue %0 : !spirv.array <2 x !spirv.array <1 x vector <1 xf32 >>>
146+ }
147+
148+ spirv.func @array_of_one_array_of_one_splat_vector_of_f32 () -> (!spirv.array <1 x !spirv.array <1 x vector <2 xf32 >>>) " None" {
149+ // CHECK: {{%.*}} = spirv.EXT.ConstantCompositeReplicate [1.000000e+00 : f32] : !spirv.array<1 x !spirv.array<1 x vector<2xf32>>>
150+ %0 = spirv.Constant [[dense <1.0 > : vector <2 xf32 >]] : !spirv.array <1 x !spirv.array <1 x vector <2 xf32 >>>
151+ spirv.ReturnValue %0 : !spirv.array <1 x !spirv.array <1 x vector <2 xf32 >>>
152+ }
153+
154+ spirv.func @splat_array_of_splat_array_of_non_splat_array_of_f32 () -> (!spirv.array <2 x !spirv.array <2 x !spirv.array <3 x f32 >>>) " None" {
155+ // CHECK: {{%.*}} = spirv.EXT.ConstantCompositeReplicate {{\[}}[1.000000e+00 : f32, 2.000000e+00 : f32, 3.000000e+00 : f32]] : !spirv.array<2 x !spirv.array<2 x !spirv.array<3 x f32>>>
156+ %0 = spirv.Constant [[[1.0 : f32 , 2.0 : f32 , 3.0 : f32 ], [1.0 : f32 , 2.0 : f32 , 3.0 : f32 ]], [[1.0 : f32 , 2.0 : f32 , 3.0 : f32 ], [1.0 : f32 , 2.0 : f32 , 3.0 : f32 ]]] : !spirv.array <2 x !spirv.array <2 x !spirv.array <3 x f32 >>>
157+ spirv.ReturnValue %0 : !spirv.array <2 x !spirv.array <2 x !spirv.array <3 x f32 >>>
158+ }
159+
100160 spirv.func @array_of_one_i32 () -> (!spirv.array <1 x i32 >) " None" {
101161 // CHECK-NOT: spirv.EXT.ConstantCompositeReplicate
102162 %0 = spirv.Constant [1 : i32 ] : !spirv.array <1 x i32 >
@@ -144,6 +204,18 @@ spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader, ReplicatedCompos
144204 %0 = spirv.Constant [dense <[1.0 , 2.0 ]> : vector <2 xf32 >, dense <[1.0 , 3.0 ]> : vector <2 xf32 >] : !spirv.array <2 x vector <2 xf32 >>
145205 spirv.ReturnValue %0 : !spirv.array <2 x vector <2 xf32 >>
146206 }
207+
208+ spirv.func @array_of_one_array_of_one_non_splat_vector_of_i32 () -> (!spirv.array <1 x !spirv.array <1 x vector <2 xi32 >>>) " None" {
209+ // CHECK-NOT spirv.EXT.ConstantCompositeReplicate
210+ %0 = spirv.Constant [[dense <[1 , 2 ]> : vector <2 xi32 >]] : !spirv.array <1 x !spirv.array <1 x vector <2 xi32 >>>
211+ spirv.ReturnValue %0 : !spirv.array <1 x !spirv.array <1 x vector <2 xi32 >>>
212+ }
213+
214+ spirv.func @array_of_one_array_of_one_vector_of_one_i32 () -> (!spirv.array <1 x !spirv.array <1 x vector <1 xi32 >>>) " None" {
215+ // CHECK-NOT spirv.EXT.ConstantCompositeReplicate
216+ %0 = spirv.Constant [[dense <1 > : vector <1 xi32 >]] : !spirv.array <1 x !spirv.array <1 x vector <1 xi32 >>>
217+ spirv.ReturnValue %0 : !spirv.array <1 x !spirv.array <1 x vector <1 xi32 >>>
218+ }
147219}
148220
149221// -----
0 commit comments