39 lines · plain
1; Verify that we don't crash on mutually recursive coroutines2; RUN: opt < %s -passes='cgscc(coro-split)' -S | FileCheck %s3 4target triple = "x86_64-redhat-linux-gnu"5 6; CHECK-LABEL: define void @foo7define void @foo() presplitcoroutine personality ptr null {8entry:9 10 %0 = call token @llvm.coro.id(i32 0, ptr null, ptr null, ptr null)11 %1 = call ptr @llvm.coro.begin(token %0, ptr null)12 %2 = call token @llvm.coro.save(ptr null)13 %3 = call i8 @llvm.coro.suspend(token none, i1 false)14 %4 = call token @llvm.coro.save(ptr null)15 ; CHECK: call void @bar(ptr null, ptr null)16 call void @llvm.coro.await.suspend.void(ptr null, ptr null, ptr @bar)17 ret void18}19 20; CHECK-LABEL: define void @bar({{.*}})21define void @bar(ptr %0, ptr %1) {22entry:23 ; CHECK: call void @foo()24 call void @foo()25 ret void26}27 28; CHECK-LABEL: @foo.resume({{.*}})29; CHECK-LABEL: @foo.destroy({{.*}})30; CHECK-LABEL: @foo.cleanup({{.*}})31 32declare token @llvm.coro.id(i32, ptr readnone, ptr nocapture readonly, ptr) #033declare ptr @llvm.coro.begin(token, ptr writeonly) nounwind34declare token @llvm.coro.save(ptr) nomerge nounwind35declare void @llvm.coro.await.suspend.void(ptr, ptr, ptr)36declare i8 @llvm.coro.suspend(token, i1) nounwind37 38attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: read) }39