32 lines · plain
1; Test that store-load operation that crosses suspension point will not be eliminated by DSE2; Coro result conversion function that attempts to modify promise shall produce this pattern3; RUN: opt < %s -passes='coro-early,dse' -S | FileCheck %s4 5define void @fn() presplitcoroutine {6 %__promise = alloca ptr, align 87 %id = call token @llvm.coro.id(i32 16, ptr %__promise, ptr @fn, ptr null)8 %hdl = call ptr @llvm.coro.begin(token %id, ptr null)9; CHECK: %promise.addr = call ptr @llvm.coro.promise(ptr %hdl, i32 8, i1 false)10 %save = call token @llvm.coro.save(ptr null)11 %sp = call i8 @llvm.coro.suspend(token %save, i1 false)12 %flag = icmp ule i8 %sp, 113 br i1 %flag, label %resume, label %suspend14 15resume:16; CHECK: call void @use_value(ptr %promise.addr)17 call void @use_value(ptr %__promise)18 br label %suspend19 20suspend:21; load value when resume22; CHECK: %null = load ptr, ptr %promise.addr, align 823 %null = load ptr, ptr %__promise, align 824 call void @use_value(ptr %null)25; store value when suspend26; CHECK: store ptr null, ptr %promise.addr, align 827 store ptr null, ptr %__promise, align 828 ret void29}30 31declare void @use_value(ptr)32