xref: /llvm-project/llvm/test/CodeGen/SPIRV/branching/if-merging.ll (revision 42633cf27bd2cfb44e9f332c33cfd6750b9d7be4)
1*42633cf2SVyacheslav Levytskyy; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s
20098f2aeSIlia Diachkov
34bd9d98bSAndrey Tretyakov;; NOTE: This does not check for structured control-flow operations.
40098f2aeSIlia Diachkov
50098f2aeSIlia Diachkov; CHECK-DAG: OpName [[FOO:%.+]] "foo"
60098f2aeSIlia Diachkov; CHECK-DAG: OpName [[BAR:%.+]] "bar"
70098f2aeSIlia Diachkov
853326ee0SNathan Gauër; CHECK-DAG: %[[#I32:]] = OpTypeInt 32
953326ee0SNathan Gauër; CHECK-DAG: %[[#BOOL:]] = OpTypeBool
100098f2aeSIlia Diachkov
110098f2aeSIlia Diachkovdeclare i32 @foo()
120098f2aeSIlia Diachkovdeclare i32 @bar()
130098f2aeSIlia Diachkov
140098f2aeSIlia Diachkovdefine i32 @test_if(i32 %a, i32 %b) {
150098f2aeSIlia Diachkoventry:
160098f2aeSIlia Diachkov  %cond = icmp eq i32 %a, %b
170098f2aeSIlia Diachkov  br i1 %cond, label %true_label, label %false_label
180098f2aeSIlia Diachkov
190098f2aeSIlia Diachkovtrue_label:
200098f2aeSIlia Diachkov  %v1 = call i32 @foo()
210098f2aeSIlia Diachkov  br label %merge_label
220098f2aeSIlia Diachkov
230098f2aeSIlia Diachkovfalse_label:
240098f2aeSIlia Diachkov  %v2 = call i32 @bar()
250098f2aeSIlia Diachkov  br label %merge_label
260098f2aeSIlia Diachkov
270098f2aeSIlia Diachkovmerge_label:
280098f2aeSIlia Diachkov  %v = phi i32 [%v1, %true_label], [%v2, %false_label]
290098f2aeSIlia Diachkov  ret i32 %v
300098f2aeSIlia Diachkov}
310098f2aeSIlia Diachkov
320098f2aeSIlia Diachkov; CHECK: OpFunction
3353326ee0SNathan Gauër; CHECK: %[[#A:]] = OpFunctionParameter %[[#I32]]
3453326ee0SNathan Gauër; CHECK: %[[#B:]] = OpFunctionParameter %[[#I32]]
350098f2aeSIlia Diachkov
3653326ee0SNathan Gauër; CHECK: %[[#ENTRY:]] = OpLabel
3753326ee0SNathan Gauër; CHECK: %[[#COND:]] = OpIEqual %[[#BOOL]] %[[#A]] %[[#B]]
3853326ee0SNathan Gauër; CHECK: OpBranchConditional %[[#COND]] %[[#TRUE_LABEL:]] %[[#FALSE_LABEL:]]
390098f2aeSIlia Diachkov
4053326ee0SNathan Gauër; CHECK: %[[#FALSE_LABEL]] = OpLabel
4153326ee0SNathan Gauër; CHECK: %[[#V2:]] = OpFunctionCall %[[#I32]] [[BAR]]
4253326ee0SNathan Gauër; CHECK: OpBranch %[[#MERGE_LABEL:]]
430098f2aeSIlia Diachkov
4453326ee0SNathan Gauër; CHECK: %[[#TRUE_LABEL]] = OpLabel
4553326ee0SNathan Gauër; CHECK: %[[#V1:]] = OpFunctionCall %[[#I32]] [[FOO]]
4653326ee0SNathan Gauër; CHECK: OpBranch %[[#MERGE_LABEL]]
470c07e7c2SNathan Gauër
4853326ee0SNathan Gauër
4953326ee0SNathan Gauër; CHECK: %[[#MERGE_LABEL]] = OpLabel
5053326ee0SNathan Gauër; CHECK-NEXT: [[V:%.+]] = OpPhi %[[#I32]] %[[#V1]] %[[#TRUE_LABEL]] %[[#V2]] %[[#FALSE_LABEL]]
511ed65febSNathan Gauër; CHECK: OpReturnValue [[V]]
521ed65febSNathan Gauër
530098f2aeSIlia Diachkov; CHECK-NEXT: OpFunctionEnd
54