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