xref: /llvm-project/llvm/test/Bitcode/convergence-control.ll (revision 1469d82e1cb3edc939d6b93089046edfef0cf36c)
1; RUN: llvm-dis < %s.bc | FileCheck %s
2
3define void @loop_nesting(i1 %arg) convergent {
4A:
5  ; CHECK-LABEL: A:
6  ; CHECK: [[A:%.*]] = call token @llvm.experimental.convergence.entry()
7  ;
8  %a = call token @llvm.experimental.convergence.entry()
9  br label %B
10
11B:
12  ; CHECK-LABEL: B:
13  ; CHECK: [[B:%.*]] = call token @llvm.experimental.convergence.anchor()
14  ;
15  %b = call token @llvm.experimental.convergence.anchor()
16  br i1 %arg, label %C, label %D
17
18C:
19  ; CHECK-LABEL: C:
20  ; CHECK: [[C:%.*]] = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token [[B]]) ]
21  ; CHEC K: call void @f() [ "convergencectrl"(token [[C]]) ]
22  ;
23  %c = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token %b) ]
24  call void @f() [ "convergencectrl"(token %c) ]
25  br label %B
26
27D:
28  ; CHECK-LABEL: D:
29  ; CHECK:  call void @f() [ "convergencectrl"(token [[B]]) ]
30  ;
31  call void @f() [ "convergencectrl"(token %b) ]
32  br i1 %arg, label %B, label %E
33
34E:
35  ret void
36}
37
38declare void @f() convergent
39
40declare token @llvm.experimental.convergence.entry()
41declare token @llvm.experimental.convergence.anchor()
42declare token @llvm.experimental.convergence.loop()
43