blob: 81fecf307eb7a03ac3c68786c35839b8bd511f00 [file] [edit]
; 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<v1.0, [Shader], []> {
; 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