54 lines · plain
1; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s2 3;; NOTE: This does not check for structured control-flow operations.4 5; CHECK-DAG: OpName [[FOO:%.+]] "foo"6; CHECK-DAG: OpName [[BAR:%.+]] "bar"7 8; CHECK-DAG: %[[#I32:]] = OpTypeInt 329; CHECK-DAG: %[[#BOOL:]] = OpTypeBool10 11declare i32 @foo()12declare i32 @bar()13 14define i32 @test_if(i32 %a, i32 %b) {15entry:16 %cond = icmp eq i32 %a, %b17 br i1 %cond, label %true_label, label %false_label18 19true_label:20 %v1 = call i32 @foo()21 br label %merge_label22 23false_label:24 %v2 = call i32 @bar()25 br label %merge_label26 27merge_label:28 %v = phi i32 [%v1, %true_label], [%v2, %false_label]29 ret i32 %v30}31 32; CHECK: OpFunction33; CHECK: %[[#A:]] = OpFunctionParameter %[[#I32]]34; CHECK: %[[#B:]] = OpFunctionParameter %[[#I32]]35 36; CHECK: %[[#ENTRY:]] = OpLabel37; CHECK: %[[#COND:]] = OpIEqual %[[#BOOL]] %[[#A]] %[[#B]]38; CHECK: OpBranchConditional %[[#COND]] %[[#TRUE_LABEL:]] %[[#FALSE_LABEL:]]39 40; CHECK: %[[#FALSE_LABEL]] = OpLabel41; CHECK: %[[#V2:]] = OpFunctionCall %[[#I32]] [[BAR]]42; CHECK: OpBranch %[[#MERGE_LABEL:]]43 44; CHECK: %[[#TRUE_LABEL]] = OpLabel45; CHECK: %[[#V1:]] = OpFunctionCall %[[#I32]] [[FOO]]46; CHECK: OpBranch %[[#MERGE_LABEL]]47 48 49; CHECK: %[[#MERGE_LABEL]] = OpLabel50; CHECK-NEXT: [[V:%.+]] = OpPhi %[[#I32]] %[[#V1]] %[[#TRUE_LABEL]] %[[#V2]] %[[#FALSE_LABEL]]51; CHECK: OpReturnValue [[V]]52 53; CHECK-NEXT: OpFunctionEnd54