84 lines · plain
1; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s2; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %}3 4; CHECK: OpFunction5; CHECK: OpBranchConditional %[[#]] %[[#if_then:]] %[[#if_end:]]6; CHECK: %[[#if_then]] = OpLabel7; CHECK: OpBranch %[[#if_end]]8; CHECK: %[[#if_end]] = OpLabel9; CHECK: %[[#Var:]] = OpPhi10; CHECK: OpSwitch %[[#Var]] %[[#]] [[#]] %[[#]] [[#]] %[[#]] [[#]] %[[#]] [[#]] %[[#]] [[#]] %[[#]] [[#]] %[[#]] [[#]] %[[#]] [[#]] %[[#]] [[#]] %[[#]] [[#]] %[[#]] [[#]] %[[#]] [[#]] %[[#]]11; CHECK-COUNT-10: OpLabel12; CHECK: %[[#epilog:]] = OpLabel13; CHECK: OpBranch %[[#exit:]]14; CHECK: %[[#exit]] = OpLabel15; CHECK: OpReturn16; CHECK-NOT: OpLabel17; CHECK-NEXT: OpFunctionEnd18 19define spir_func void @foo(i64 noundef %addr, i64 noundef %as) {20entry:21 %src = inttoptr i64 %as to ptr addrspace(4)22 %val = load i8, ptr addrspace(4) %src23 %cmp = icmp sgt i8 %val, 024 br i1 %cmp, label %if.then, label %if.end25 26if.then:27 %add.ptr = getelementptr inbounds i8, ptr addrspace(4) %src, i64 128 %cond = load i8, ptr addrspace(4) %add.ptr29 br label %if.end30 31if.end:32 %swval = phi i8 [ %cond, %if.then ], [ %val, %entry ]33 switch i8 %swval, label %sw.default [34 i8 -127, label %sw.epilog35 i8 -126, label %sw.bb336 i8 -125, label %sw.bb437 i8 -111, label %sw.bb538 i8 -110, label %sw.bb639 i8 -109, label %sw.bb740 i8 -15, label %sw.bb841 i8 -14, label %sw.bb842 i8 -13, label %sw.bb843 i8 -124, label %sw.bb944 i8 -95, label %sw.bb1045 i8 -123, label %sw.bb1146 ]47 48sw.bb3:49 br label %sw.epilog50 51sw.bb4:52 br label %sw.epilog53 54sw.bb5:55 br label %sw.epilog56 57sw.bb6:58 br label %sw.epilog59 60sw.bb7:61 br label %sw.epilog62 63sw.bb8:64 br label %sw.epilog65 66sw.bb9:67 br label %sw.epilog68 69sw.bb10:70 br label %sw.epilog71 72sw.bb11:73 br label %sw.epilog74 75sw.default:76 br label %sw.epilog77 78sw.epilog:79 br label %exit80 81exit:82 ret void83}84