1; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s 2 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 32 9; CHECK-DAG: %[[#BOOL:]] = OpTypeBool 10 11declare i32 @foo() 12declare i32 @bar() 13 14define i32 @test_if(i32 %a, i32 %b) { 15entry: 16 %cond = icmp eq i32 %a, %b 17 br i1 %cond, label %true_label, label %false_label 18 19true_label: 20 %v1 = call i32 @foo() 21 br label %merge_label 22 23false_label: 24 %v2 = call i32 @bar() 25 br label %merge_label 26 27merge_label: 28 %v = phi i32 [%v1, %true_label], [%v2, %false_label] 29 ret i32 %v 30} 31 32; CHECK: OpFunction 33; CHECK: %[[#A:]] = OpFunctionParameter %[[#I32]] 34; CHECK: %[[#B:]] = OpFunctionParameter %[[#I32]] 35 36; CHECK: %[[#ENTRY:]] = OpLabel 37; CHECK: %[[#COND:]] = OpIEqual %[[#BOOL]] %[[#A]] %[[#B]] 38; CHECK: OpBranchConditional %[[#COND]] %[[#TRUE_LABEL:]] %[[#FALSE_LABEL:]] 39 40; CHECK: %[[#FALSE_LABEL]] = OpLabel 41; CHECK: %[[#V2:]] = OpFunctionCall %[[#I32]] [[BAR]] 42; CHECK: OpBranch %[[#MERGE_LABEL:]] 43 44; CHECK: %[[#TRUE_LABEL]] = OpLabel 45; CHECK: %[[#V1:]] = OpFunctionCall %[[#I32]] [[FOO]] 46; CHECK: OpBranch %[[#MERGE_LABEL]] 47 48 49; CHECK: %[[#MERGE_LABEL]] = OpLabel 50; CHECK-NEXT: [[V:%.+]] = OpPhi %[[#I32]] %[[#V1]] %[[#TRUE_LABEL]] %[[#V2]] %[[#FALSE_LABEL]] 51; CHECK: OpReturnValue [[V]] 52 53; CHECK-NEXT: OpFunctionEnd 54