| ; RUN: llvm-dis < %s.bc | FileCheck %s | |
| define void @loop_nesting(i1 %arg) convergent { | |
| A: | |
| ; CHECK-LABEL: A: | |
| ; CHECK: [[A:%.*]] = call token @llvm.experimental.convergence.entry() | |
| ; | |
| %a = call token @llvm.experimental.convergence.entry() | |
| br label %B | |
| B: | |
| ; CHECK-LABEL: B: | |
| ; CHECK: [[B:%.*]] = call token @llvm.experimental.convergence.anchor() | |
| ; | |
| %b = call token @llvm.experimental.convergence.anchor() | |
| br i1 %arg, label %C, label %D | |
| C: | |
| ; CHECK-LABEL: C: | |
| ; CHECK: [[C:%.*]] = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token [[B]]) ] | |
| ; CHEC K: call void @f() [ "convergencectrl"(token [[C]]) ] | |
| ; | |
| %c = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token %b) ] | |
| call void @f() [ "convergencectrl"(token %c) ] | |
| br label %B | |
| D: | |
| ; CHECK-LABEL: D: | |
| ; CHECK: call void @f() [ "convergencectrl"(token [[B]]) ] | |
| ; | |
| call void @f() [ "convergencectrl"(token %b) ] | |
| br i1 %arg, label %B, label %E | |
| E: | |
| ret void | |
| } | |
| declare void @f() convergent | |
| declare token @llvm.experimental.convergence.entry() | |
| declare token @llvm.experimental.convergence.anchor() | |
| declare token @llvm.experimental.convergence.loop() |