blob: d5c678e1d1809d92b8201b20286f3cf468430cee [file] [edit]
; A switch on an odd-width integer type.
; RUN: llc -verify-machineinstrs -O2 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s
; RUN: %if spirv-tools %{ llc -O2 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}
; CHECK: %[[#I32:]] = OpTypeInt 32 0
; CHECK: %[[#COND:]] = OpFunctionParameter %[[#I32]]
; CHECK: OpSwitch %[[#COND]] %[[#]] 0 %[[#]] 1 %[[#]] 2 %[[#]]
define spir_func void @fuzz_kernel(ptr addrspace(1) %in, ptr addrspace(1) %out, i31 %n) {
entry:
switch i31 %n, label %d [
i31 0, label %m
i31 1, label %b
i31 2, label %c
]
b:
br label %m
c:
br label %m
d:
br label %m
m:
%r = phi i31 [ 40, %d ], [ 20, %b ], [ 30, %c ], [ 1, %entry ]
store i31 %r, ptr addrspace(1) %out, align 4
ret void
}
; The switch condition is also used by another instruction.
; CHECK: %[[#COND2:]] = OpFunctionParameter %[[#I32]]
; CHECK: OpSwitch %[[#COND2]] %[[#]] 0 %[[#]] 1 %[[#]] 2 %[[#]]
define spir_func void @cond_used_elsewhere(ptr addrspace(1) %out, i31 %n) {
entry:
switch i31 %n, label %d [
i31 0, label %a
i31 1, label %b
i31 2, label %c
]
a:
br label %m
b:
br label %m
c:
br label %m
d:
br label %m
m:
%r = phi i31 [ 40, %d ], [ 20, %a ], [ 30, %b ], [ 50, %c ]
%add = add i31 %r, %n
store i31 %add, ptr addrspace(1) %out, align 4
ret void
}