76 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes='simplifycfg<hoist-common-insts>' -S | FileCheck %s3 4declare token @llvm.coro.save(ptr) #05declare 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:%.*]], 011; 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 void22;23entry:24 %cmp = icmp slt i32 %x, 025 br i1 %cmp, label %await.suspend, label %final.suspend26 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.ret31 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.ret36 37coro.ret:38 ret void39}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:%.*]], 045; 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 void56;57entry:58 %cmp = icmp slt i32 %x, 059 br i1 %cmp, label %await.suspend, label %final.suspend60 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.ret65 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.ret70 71coro.ret:72 ret void73}74 75attributes #0 = { nomerge }76