brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 780f24e Raw
57 lines · plain
1; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s2 3target datalayout = "p:64:64:64"4 5declare void @prototype_f(ptr, i1)6 7declare noalias ptr @allocate(i32 %size)8declare void @deallocate(ptr %ptr)9declare void @init(ptr %ptr)10declare void @use(ptr %ptr)11declare void @use_addr_val(i64 %val, ptr %addr)12 13define { ptr, ptr } @f(ptr %buffer) presplitcoroutine {14entry:15  %tmp = alloca { i64, i64 }, align 816  %proj.1 = getelementptr inbounds { i64, i64 }, ptr %tmp, i64 0, i32 017  %proj.2 = getelementptr inbounds { i64, i64 }, ptr %tmp, i64 0, i32 118  store i64 0, ptr %proj.1, align 819  store i64 0, ptr %proj.2, align 820  %escape_addr = ptrtoint ptr %tmp to i6421  %id = call token @llvm.coro.id.retcon.once(i32 32, i32 8, ptr %buffer, ptr @prototype_f, ptr @allocate, ptr @deallocate)22  %hdl = call ptr @llvm.coro.begin(token %id, ptr null)23  %proj.2.2 = getelementptr inbounds { i64, i64 }, ptr %tmp, i64 0, i32 124  call void @init(ptr %proj.1)25  call void @init(ptr %proj.2.2)26  call void @use_addr_val(i64 %escape_addr, ptr %tmp)27  %abort = call i1 (...) @llvm.coro.suspend.retcon.i1(ptr %tmp)28  br i1 %abort, label %end, label %resume29 30resume:31  call void @use(ptr %tmp)32  br label %end33 34end:35  call void @llvm.coro.end(ptr %hdl, i1 0, token none)36  unreachable37}38; Make sure we don't lose writes to the frame.39; CHECK-LABEL: define { ptr, ptr } @f(ptr %buffer) {40; CHECK:  [[PROJ2:%.*]] = getelementptr inbounds { i64, i64 }, ptr %buffer, i64 0, i32 141; CHECK:  store i64 0, ptr %buffer42; CHECK:  store i64 0, ptr [[PROJ2]]43; CHECK:  [[ESCAPED_ADDR:%.*]] = ptrtoint ptr %buffer to i6444; CHECK:  call void @init(ptr %buffer)45; CHECK:  call void @init(ptr [[PROJ2]])46; CHECK:  call void @use_addr_val(i64 [[ESCAPED_ADDR]], ptr %buffer)47 48; CHECK-LABEL: define internal void @f.resume.0(ptr {{.*}} %0, i1 %1) {49; CHECK: resume:50; CHECK:  call void @use(ptr %0)51 52declare token @llvm.coro.id.retcon.once(i32, i32, ptr, ptr, ptr, ptr)53declare ptr @llvm.coro.begin(token, ptr)54declare i1 @llvm.coro.suspend.retcon.i1(...)55declare void @llvm.coro.end(ptr, i1, token)56 57