================ @@ -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 ---------------- mtrofin wrote:
Sorry for insisting on this, it's maybe because I got "bitten" before (with the suspend), but what other examples do we have where, silently, instructions don't get executed after a call? Also, maybe this would become moot if we address https://discourse.llvm.org/t/coro-pre-split-handling-of-the-suspend-edge/75043 like @jyknight suggested (i.e. not even have the misleading edge)? 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