37 lines · plain
1; RUN: opt < %s -passes='module(coro-early,coro-early)' -S | FileCheck %s2 3; Check that coro-early can run twice without asserting/crashing.4 5; CHECK-LABEL: define ptr @f6; CHECK: call token @llvm.coro.id(i32 0, ptr null, ptr @f, ptr null)7 8define ptr @f(i32 %n) presplitcoroutine {9entry:10 %id = call token @llvm.coro.id(i32 0, ptr null, ptr null, ptr null)11 %size = call i32 @llvm.coro.size.i32()12 %alloc = call ptr @malloc(i32 %size)13 %hdl = call ptr @llvm.coro.begin(token %id, ptr %alloc)14 15 %sp1 = call i8 @llvm.coro.suspend(token none, i1 false)16 switch i8 %sp1, label %suspend [i8 0, label %resume117 i8 1, label %cleanup]18resume1:19 br label %cleanup20cleanup:21 %mem = call ptr @llvm.coro.free(token %id, ptr %hdl)22 call void @free(ptr %mem)23 br label %suspend24suspend:25 call void @llvm.coro.end(ptr %hdl, i1 0, token none)26 ret ptr %hdl27}28 29declare token @llvm.coro.id(i32, ptr, ptr, ptr)30declare i32 @llvm.coro.size.i32()31declare noalias ptr @malloc(i32)32declare ptr @llvm.coro.begin(token, ptr)33declare i8 @llvm.coro.suspend(token, i1)34declare ptr @llvm.coro.free(token, ptr)35declare void @free(ptr)36declare void @llvm.coro.end(ptr, i1, token)37