xref: /llvm-project/llvm/test/CodeGen/SPIRV/branching/OpSwitchUnreachable.ll (revision 53326ee0cf45fce3f80e2e98638dd27edb20c516)
1; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
2; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}
3
4; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
5; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %}
6
7define void @test_switch_with_unreachable_block(i1 %a) {
8  %value = zext i1 %a to i32
9; CHECK-SPIRV:      OpSwitch %[[#]] %[[#UNREACHABLE:]] 0 %[[#REACHABLE:]] 1 %[[#REACHABLE:]]
10  switch i32 %value, label %unreachable [
11    i32 0, label %reachable
12    i32 1, label %reachable
13  ]
14
15; CHECK-SPIRV-NEXT: %[[#REACHABLE]] = OpLabel
16reachable:
17; CHECK-SPIRV-NEXT: OpReturn
18  ret void
19
20; CHECK-SPIRV:      %[[#UNREACHABLE]] = OpLabel
21; CHECK-SPIRV-NEXT: OpUnreachable
22unreachable:
23  unreachable
24}
25