| ; 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 | |
| } |