; RUN: %if spirv-tools %{ spirv-as --target-env spv1.0 %s -o - | mlir-translate --deserialize-spirv - -o - | FileCheck %s %} ; This test is analogous to selection.spv but tests switch op. ; CHECK: spirv.module Logical GLSL450 requires #spirv.vce { ; CHECK-NEXT: spirv.func @switch({{%.*}}: si32) "None" { ; CHECK: {{%.*}} = spirv.Constant 1.000000e+00 : f32 ; CHECK-NEXT: {{%.*}} = spirv.Undef : vector<3xf32> ; CHECK-NEXT: {{%.*}} = spirv.CompositeInsert {{%.*}}, {{%.*}}[0 : i32] : f32 into vector<3xf32> ; CHECK-NEXT: spirv.Branch ^[[bb:.+]] ; CHECK-NEXT: ^[[bb:.+]]: ; CHECK-NEXT: {{%.*}} = spirv.mlir.selection -> vector<3xf32> { ; CHECK-NEXT: spirv.Switch {{%.*}} : si32, [ ; CHECK-NEXT: default: ^[[bb:.+]]({{%.*}}: vector<3xf32>), ; CHECK-NEXT: 0: ^[[bb:.+]]({{%.*}}: vector<3xf32>), ; CHECK-NEXT: 1: ^[[bb:.+]]({{%.*}}: vector<3xf32>) ; CHECK: ^[[bb:.+]]({{%.*}}: vector<3xf32>): ; CHECK: spirv.Branch ^[[bb:.+]]({{%.*}}: vector<3xf32>) ; CHECK-NEXT: ^[[bb:.+]]({{%.*}}: vector<3xf32>): ; CHECK: spirv.Branch ^[[bb:.+]]({{%.*}}: vector<3xf32>) ; CHECK-NEXT: ^[[bb:.+]]({{%.*}}: vector<3xf32>): ; CHECK-NEXT: spirv.mlir.merge %8 : vector<3xf32> ; CHECK-NEXT } ; CHECK: spirv.Return ; CHECK-NEXT: } ; CHECK: } OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint GLCompute %main "main" OpExecutionMode %main LocalSize 1 1 1 OpName %switch "switch" OpName %main "main" %void = OpTypeVoid %int = OpTypeInt 32 1 %1 = OpTypeFunction %void %int %float = OpTypeFloat 32 %float_1 = OpConstant %float 1 %v3float = OpTypeVector %float 3 %9 = OpUndef %v3float %float_3 = OpConstant %float 3 %float_4 = OpConstant %float 4 %float_2 = OpConstant %float 2 %25 = OpTypeFunction %void %switch = OpFunction %void None %1 %5 = OpFunctionParameter %int %6 = OpLabel OpBranch %12 %12 = OpLabel %11 = OpCompositeInsert %v3float %float_1 %9 0 OpSelectionMerge %15 None OpSwitch %5 %15 0 %13 1 %14 %13 = OpLabel %16 = OpPhi %v3float %11 %12 %18 = OpCompositeInsert %v3float %float_3 %16 1 OpBranch %15 %14 = OpLabel %19 = OpPhi %v3float %11 %12 %21 = OpCompositeInsert %v3float %float_4 %19 1 OpBranch %15 %15 = OpLabel %22 = OpPhi %v3float %21 %14 %18 %13 %11 %12 %24 = OpCompositeInsert %v3float %float_2 %22 2 OpReturn OpFunctionEnd %main = OpFunction %void None %25 %27 = OpLabel OpReturn OpFunctionEnd