ChuanqiXu added a comment.

There is something I am still confused about these two patch. Maybe I don't get 
the problem right.
The example problem shows if user uses `alignas` to specify the alignment for 
promise_type, the actual alignment for the promise isn't correctly due to 
compiler didn't call `new` method with alignment which isn't specified in the 
spec.
Then these two patches are trying to add paddings to the frame type to make the 
alignment of promise_type right. Here is a gap, in fact the problem comes from 
the alignment promise. But we want to solve it by over align the frame. It is 
odd for me.
I wonder if it is possible to simply adjust the alignment for the alloca of 
promise, like:

  %promise = alloca %promise_type, align 64



================
Comment at: clang/docs/LanguageExtensions.rst:2689
 
-  size_t __builtin_coro_size()
+  size_t __builtin_coro_size(bool alloc)
   void  *__builtin_coro_frame()
----------------
ychen wrote:
> lxfind wrote:
> > Do we need to change __builtin_coro_size? The argument will always be 1, 
> > right?
> > It only starts to change in LLVM intrinsics, if I read the impl correctly.
> Yeah, It is always 1 for Clang until the spec is fixed (then we could revert 
> it back to 0).  Other clients using `__builtin_coro_size` may use 0 if the 
> client doesn't care about overaligned frame or it could handle overaligned 
> frame by itself. 
BTW, is it OK to edit the `builtin`s directly? Since builtin is different with 
intrinsic which is only visible in the internal of compiler, builtin could be 
used by any end users. Although I know there should be  little users who would 
use `__builtin_coro` APIs, I worry if there is any guide principle for editing 
the `builtin`s.


================
Comment at: llvm/docs/Coroutines.rst:961
+    declare i32 @llvm.coro.align.i32()
+    declare i64 @llvm.coro.align.i64()
+
----------------
Maybe I was missing something. I think these two intrinsic should take one i8* 
argument to specify the coroutine handle. Otherwise, it may be confusing if 
there are some coroutines get inlined into other coroutine.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100739/new/

https://reviews.llvm.org/D100739

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to