================
@@ -1056,6 +1083,25 @@ void CoroCloner::create() {
   // Set up the new entry block.
   replaceEntryBlock();
 
+  // Turn symmetric transfers into musttail calls.
+  for (CallInst *ResumeCall : Shape.SymmetricTransfers) {
+    ResumeCall = cast<CallInst>(VMap[ResumeCall]);
+    ResumeCall->setCallingConv(NewF->getCallingConv());
+    if (TTI.supportsTailCallFor(ResumeCall)) {
+      // FIXME: Could we support symmetric transfer effectively without
+      // musttail?
+      ResumeCall->setTailCallKind(CallInst::TCK_MustTail);
+    }
+
+    // Put a 'ret void' after the call, and split any remaining instructions to
----------------
zmodem wrote:

That still sounds like the remark would not target the compiler user, but the 
developer of the compiler tool -- and that's not really what optimization 
remarks are for.

The more I think about this, the less I like the idea of a remark. A "deleted 
instructions after llvm.coro.await.suspend.handle call" remark would be pure 
noise for a normal optimization remarks user. Plus we would need to maintain 
the code which to emit it, including tests for when it should trigger or not.

I think my patch makes the semantic of llvm.coro.await.suspend.handle clear in 
the doc, I think that behavior is compatible with how calls in the IR already 
works, and I think existing passes will handle it well. I don't think it needs 
special handling.

https://github.com/llvm/llvm-project/pull/89751
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to