Fix an issue where `FunctionSamples::getCanonicalFnName` incorrectly
canonicalizes coro await suspense wrapper functions to collide with the
coro function itself. This causes the sample annotation to skip coro
function. Canonicalization strips everything comes after the first dot
(.), unless the function attribute
"sample-profile-suffix-elision-policy" is set to "selected", in which
case it strips after the known suffixes. The wrapper function name has
the suffix of ".__await_suspend_wrapper__" + await_kind. Add the
attribute to wrapper function so that the suffix is not stripped.
It is illegal to merge two `llvm.coro.save` calls unless their
`llvm.coro.suspend` users are also merged. Marks it "nomerge" for
the moment.
This reverts D129025.
Alternative to D129025, which affects other token type users like WinEH.
Reviewed By: ChuanqiXu
Differential Revision: https://reviews.llvm.org/D129530
This fixes bug49264.
Simply, coroutine shouldn't be inlined before CoroSplit. And the marker
for pre-splited coroutine is created in CoroEarly pass, which ran after
AlwaysInliner Pass in O0 pipeline. So that the AlwaysInliner couldn't
detect it shouldn't inline a coroutine. So here is the error.
This patch set the presplit attribute in clang and mlir. So the inliner
would always detect the attribute before splitting.
Reviewed By: rjmccall, ezhulenev
Differential Revision: https://reviews.llvm.org/D115790