| ; RUN: llvm-dis < %s.bc | FileCheck %s |
| |
| define void @loop_nesting() 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 undef, 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 undef, 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() |