brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.2 KiB · e4df007 Raw
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