yuxuanchen1997 wrote:

> > > Got it. Lowering coro.free with the delete contionally sounds a little 
> > > bit raw but may be acceptable.
> > 
> > 
> > There's a part that's even less elegant. Apparently the only way I can tell 
> > if a `.resume` function is passed with a frame setup with a noalloc ramp 
> > function is through checking whether destroy slot is the same pointer as 
> > cleanup.
> 
> Sorry, I didn't understand. Could you elaborate?

Sure. The .resume function takes a coroutine frame ptr. That ptr may be 
allocated on the heap or the stack, the resume function is normally oblivious 
to that. 

`coro.free` is a special case. The older set of passes can deterministically 
rewrite it. However, with [[clang::coro_await_elidable]], we can no longer 
rewrite coro.free statically in `.resume` functions, its value has to be 
conditioned on whether the frame was allocated or not. This information is not 
previously known in the resume function. 

https://github.com/llvm/llvm-project/pull/207799
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to