1; Check that coro-split doesn't choke on intrinsics in unreachable blocks 2; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S 3 4define ptr @f(i1 %arg) presplitcoroutine personality i32 0 { 5entry: 6 %arg.addr = alloca i1 7 store i1 %arg, ptr %arg.addr 8 %id = call token @llvm.coro.id(i32 0, ptr null, ptr null, ptr null) 9 %size = call i32 @llvm.coro.size.i32() 10 %alloc = call ptr @malloc(i32 %size) 11 %hdl = call ptr @llvm.coro.begin(token %id, ptr %alloc) 12 br label %cont 13 14cont: 15 %0 = call i8 @llvm.coro.suspend(token none, i1 false) 16 switch i8 %0, label %suspend [i8 0, label %resume 17 i8 1, label %cleanup] 18resume: 19 br label %cleanup 20 21cleanup: 22 %mem = call ptr @llvm.coro.free(token %id, ptr %hdl) 23 call void @free(ptr %mem) 24 br label %suspend 25 26suspend: 27 call i1 @llvm.coro.end(ptr %hdl, i1 0, token none) 28 ret ptr %hdl 29 30no.predecessors: 31 %argval = load i1, ptr %arg.addr 32 call void @print(i1 %argval) 33 br label %suspend 34 35} 36 37declare ptr @llvm.coro.free(token, ptr) 38declare i32 @llvm.coro.size.i32() 39declare i8 @llvm.coro.suspend(token, i1) 40declare void @llvm.coro.resume(ptr) 41declare void @llvm.coro.destroy(ptr) 42 43declare token @llvm.coro.id(i32, ptr, ptr, ptr) 44declare i1 @llvm.coro.alloc(token) 45declare ptr @llvm.coro.begin(token, ptr) 46declare i1 @llvm.coro.end(ptr, i1, token) 47 48declare noalias ptr @malloc(i32) 49declare void @print(i1) 50declare void @free(ptr) 51