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