1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt < %s -passes='simplifycfg<hoist-common-insts>' -S | FileCheck %s 3 4declare token @llvm.coro.save(ptr) #0 5declare i8 @llvm.coro.suspend(token, i1) 6 7define void @final_nonfinal_suspend(i32 %x) { 8; CHECK-LABEL: @final_nonfinal_suspend( 9; CHECK-NEXT: entry: 10; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[X:%.*]], 0 11; CHECK-NEXT: br i1 [[CMP]], label [[AWAIT_SUSPEND:%.*]], label [[FINAL_SUSPEND:%.*]] 12; CHECK: await.suspend: 13; CHECK-NEXT: [[TMP0:%.*]] = call token @llvm.coro.save(ptr null) 14; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.coro.suspend(token [[TMP0]], i1 false) 15; CHECK-NEXT: br label [[CORO_RET:%.*]] 16; CHECK: final.suspend: 17; CHECK-NEXT: [[TMP2:%.*]] = call token @llvm.coro.save(ptr null) 18; CHECK-NEXT: [[TMP3:%.*]] = call i8 @llvm.coro.suspend(token [[TMP2]], i1 true) 19; CHECK-NEXT: br label [[CORO_RET]] 20; CHECK: coro.ret: 21; CHECK-NEXT: ret void 22; 23entry: 24 %cmp = icmp slt i32 %x, 0 25 br i1 %cmp, label %await.suspend, label %final.suspend 26 27await.suspend: 28 %0 = call token @llvm.coro.save(ptr null) 29 %1 = call i8 @llvm.coro.suspend(token %0, i1 false) 30 br label %coro.ret 31 32final.suspend: 33 %2 = call token @llvm.coro.save(ptr null) 34 %3 = call i8 @llvm.coro.suspend(token %2, i1 true) 35 br label %coro.ret 36 37coro.ret: 38 ret void 39} 40 41define void @both_nonfinal_suspend(i32 %x) { 42; CHECK-LABEL: @both_nonfinal_suspend( 43; CHECK-NEXT: entry: 44; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[X:%.*]], 0 45; CHECK-NEXT: br i1 [[CMP]], label [[AWAIT_SUSPEND:%.*]], label [[FINAL_SUSPEND:%.*]] 46; CHECK: await.suspend: 47; CHECK-NEXT: [[TMP0:%.*]] = call token @llvm.coro.save(ptr null) 48; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.coro.suspend(token [[TMP0]], i1 false) 49; CHECK-NEXT: br label [[CORO_RET:%.*]] 50; CHECK: final.suspend: 51; CHECK-NEXT: [[TMP2:%.*]] = call token @llvm.coro.save(ptr null) 52; CHECK-NEXT: [[TMP3:%.*]] = call i8 @llvm.coro.suspend(token [[TMP2]], i1 false) 53; CHECK-NEXT: br label [[CORO_RET]] 54; CHECK: coro.ret: 55; CHECK-NEXT: ret void 56; 57entry: 58 %cmp = icmp slt i32 %x, 0 59 br i1 %cmp, label %await.suspend, label %final.suspend 60 61await.suspend: 62 %0 = call token @llvm.coro.save(ptr null) 63 %1 = call i8 @llvm.coro.suspend(token %0, i1 false) 64 br label %coro.ret 65 66final.suspend: 67 %2 = call token @llvm.coro.save(ptr null) 68 %3 = call i8 @llvm.coro.suspend(token %2, i1 false) 69 br label %coro.ret 70 71coro.ret: 72 ret void 73} 74 75attributes #0 = { nomerge } 76