1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -S -passes=gvn -o - %s | FileCheck %s 3 4define i32 @foo(i1 %cond) { 5; CHECK-LABEL: @foo( 6; CHECK-NEXT: entry: 7; CHECK-NEXT: [[V0:%.*]] = call i32 @llvm.convergent() 8; CHECK-NEXT: br i1 [[COND:%.*]], label [[BODY:%.*]], label [[END:%.*]] 9; CHECK: body: 10; CHECK-NEXT: [[V1:%.*]] = call i32 @llvm.convergent() 11; CHECK-NEXT: br label [[END]] 12; CHECK: end: 13; CHECK-NEXT: [[RET:%.*]] = phi i32 [ [[V0]], [[ENTRY:%.*]] ], [ [[V1]], [[BODY]] ] 14; CHECK-NEXT: ret i32 [[RET]] 15; 16entry: 17 %v0 = call i32 @llvm.convergent() 18 br i1 %cond, label %body, label %end 19 20body: 21 %v1 = call i32 @llvm.convergent() 22 br label %end 23 24end: 25 %ret = phi i32 [ %v0, %entry ], [ %v1, %body ] 26 ret i32 %ret 27} 28 29declare i32 @llvm.convergent() convergent nounwind readnone willreturn 30