brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.1 KiB · 0efe212 Raw
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