43 lines · plain
1; RUN: llvm-dis < %s.bc | FileCheck %s2 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 %B10 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 %D17 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 %B26 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 %E33 34E:35 ret void36}37 38declare void @f() convergent39 40declare token @llvm.experimental.convergence.entry()41declare token @llvm.experimental.convergence.anchor()42declare token @llvm.experimental.convergence.loop()43