| ; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s | |
| ; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %} | |
| ; CHECK: OpFunction | |
| ; CHECK: OpBranchConditional %[[#]] %[[#if_then:]] %[[#if_end:]] | |
| ; CHECK: %[[#if_then]] = OpLabel | |
| ; CHECK: OpBranch %[[#if_end]] | |
| ; CHECK: %[[#if_end]] = OpLabel | |
| ; CHECK: %[[#Var:]] = OpPhi | |
| ; CHECK: OpSwitch %[[#Var]] %[[#]] [[#]] %[[#]] [[#]] %[[#]] [[#]] %[[#]] [[#]] %[[#]] [[#]] %[[#]] [[#]] %[[#]] [[#]] %[[#]] [[#]] %[[#]] [[#]] %[[#]] [[#]] %[[#]] [[#]] %[[#]] [[#]] %[[#]] | |
| ; CHECK-COUNT-10: OpLabel | |
| ; CHECK: %[[#epilog:]] = OpLabel | |
| ; CHECK: OpBranch %[[#exit:]] | |
| ; CHECK: %[[#exit]] = OpLabel | |
| ; CHECK: OpReturn | |
| ; CHECK-NOT: OpLabel | |
| ; CHECK-NEXT: OpFunctionEnd | |
| define spir_func void @foo(i64 noundef %addr, i64 noundef %as) { | |
| entry: | |
| %src = inttoptr i64 %as to ptr addrspace(4) | |
| %val = load i8, ptr addrspace(4) %src | |
| %cmp = icmp sgt i8 %val, 0 | |
| br i1 %cmp, label %if.then, label %if.end | |
| if.then: | |
| %add.ptr = getelementptr inbounds i8, ptr addrspace(4) %src, i64 1 | |
| %cond = load i8, ptr addrspace(4) %add.ptr | |
| br label %if.end | |
| if.end: | |
| %swval = phi i8 [ %cond, %if.then ], [ %val, %entry ] | |
| switch i8 %swval, label %sw.default [ | |
| i8 -127, label %sw.epilog | |
| i8 -126, label %sw.bb3 | |
| i8 -125, label %sw.bb4 | |
| i8 -111, label %sw.bb5 | |
| i8 -110, label %sw.bb6 | |
| i8 -109, label %sw.bb7 | |
| i8 -15, label %sw.bb8 | |
| i8 -14, label %sw.bb8 | |
| i8 -13, label %sw.bb8 | |
| i8 -124, label %sw.bb9 | |
| i8 -95, label %sw.bb10 | |
| i8 -123, label %sw.bb11 | |
| ] | |
| sw.bb3: | |
| br label %sw.epilog | |
| sw.bb4: | |
| br label %sw.epilog | |
| sw.bb5: | |
| br label %sw.epilog | |
| sw.bb6: | |
| br label %sw.epilog | |
| sw.bb7: | |
| br label %sw.epilog | |
| sw.bb8: | |
| br label %sw.epilog | |
| sw.bb9: | |
| br label %sw.epilog | |
| sw.bb10: | |
| br label %sw.epilog | |
| sw.bb11: | |
| br label %sw.epilog | |
| sw.default: | |
| br label %sw.epilog | |
| sw.epilog: | |
| br label %exit | |
| exit: | |
| ret void | |
| } |