@@ -288,3 +288,61 @@ spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader], []> {
288288 spirv.EntryPoint " GLCompute" @main
289289 spirv.ExecutionMode @main " LocalSize" , 1 , 1 , 1
290290}
291+
292+ // -----
293+
294+ // Selection with switch and block operands
295+
296+ spirv.module Logical GLSL450 requires #spirv.vce <v1.5 , [Shader ], []> {
297+ // CHECK-LABEL: @selection_switch_operands
298+ spirv.func @selection_switch_operands (%selector : si32 ) " None" {
299+ %cst1 = spirv.Constant 1.000000e+00 : f32
300+ %vec0 = spirv.Undef : vector <3 xf32 >
301+ // CHECK: {{%.*}} = spirv.CompositeInsert {{%.*}}, {{%.*}}[0 : i32] : f32 into vector<3xf32>
302+ %vec1 = spirv.CompositeInsert %cst1 , %vec0 [0 : i32 ] : f32 into vector <3 xf32 >
303+ spirv.Branch ^bb1
304+ ^bb1 :
305+ // CHECK: {{%.*}} = spirv.mlir.selection -> vector<3xf32> {
306+ %vec4 = spirv.mlir.selection -> vector <3 xf32 > {
307+ // CHECK-NEXT: spirv.Switch {{%.*}} : si32, [
308+ // CHECK-NEXT: default: ^[[DEFAULT:.+]]({{%.*}} : vector<3xf32>),
309+ // CHECK-NEXT: 0: ^[[CASE0:.+]]({{%.*}} : vector<3xf32>),
310+ // CHECK-NEXT: 1: ^[[CASE1:.+]]({{%.*}} : vector<3xf32>)
311+ spirv.Switch %selector : si32 , [
312+ default : ^bb3 (%vec1 : vector <3 xf32 >),
313+ 0 : ^bb1 (%vec1 : vector <3 xf32 >),
314+ 1 : ^bb2 (%vec1 : vector <3 xf32 >)
315+ ]
316+ // CHECK: ^[[CASE0]]({{%.*}}: vector<3xf32>)
317+ ^bb1 (%vecbb1: vector <3 xf32 >):
318+ %cst3 = spirv.Constant 3.000000e+00 : f32
319+ // CHECK: {{%.*}} = spirv.CompositeInsert {{%.*}}, {{%.*}}[1 : i32] : f32 into vector<3xf32>
320+ %vec2 = spirv.CompositeInsert %cst3 , %vecbb1 [1 : i32 ] : f32 into vector <3 xf32 >
321+ // CHECK-NEXT: spirv.Branch ^[[DEFAULT]]({{%.*}} : vector<3xf32>)
322+ spirv.Branch ^bb3 (%vec2 : vector <3 xf32 >)
323+ // CHECK-NEXT: ^[[CASE1]]({{%.*}}: vector<3xf32>)
324+ ^bb2 (%vecbb2: vector <3 xf32 >):
325+ %cst4 = spirv.Constant 4.000000e+00 : f32
326+ // CHECK: {{%.*}} = spirv.CompositeInsert {{%.*}}, {{%.*}}[1 : i32] : f32 into vector<3xf32>
327+ %vec3 = spirv.CompositeInsert %cst4 , %vecbb2 [1 : i32 ] : f32 into vector <3 xf32 >
328+ // CHECK-NEXT: spirv.Branch ^[[DEFAULT]]({{%.*}} : vector<3xf32>)
329+ spirv.Branch ^bb3 (%vec3 : vector <3 xf32 >)
330+ // CHECK-NEXT: ^[[DEFAULT]]({{%.*}}: vector<3xf32>)
331+ ^bb3 (%vecbb3: vector <3 xf32 >):
332+ // CHECK-NEXT: spirv.mlir.merge {{%.*}} : vector<3xf32>
333+ spirv.mlir.merge %vecbb3 : vector <3 xf32 >
334+ // CHECK-NEXT: }
335+ }
336+ %cst2 = spirv.Constant 2.000000e+00 : f32
337+ // CHECK: {{%.*}} = spirv.CompositeInsert {{%.*}}, {{%.*}}[2 : i32] : f32 into vector<3xf32>
338+ %vec5 = spirv.CompositeInsert %cst2 , %vec4 [2 : i32 ] : f32 into vector <3 xf32 >
339+ spirv.Return
340+ }
341+
342+ spirv.func @main () -> () " None" {
343+ spirv.Return
344+ }
345+
346+ spirv.EntryPoint " GLCompute" @main
347+ spirv.ExecutionMode @main " LocalSize" , 1 , 1 , 1
348+ }
0 commit comments