llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang @llvm/pr-subscribers-clang-codegen Author: Wei Wang (apolloww) <details> <summary>Changes</summary> 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. --- Full diff: https://github.com/llvm/llvm-project/pull/174881.diff 2 Files Affected: - (modified) clang/lib/CodeGen/CGCoroutine.cpp (+1) - (modified) clang/test/CodeGenCoroutines/coro-attributes.cpp (+4) ``````````diff diff --git a/clang/lib/CodeGen/CGCoroutine.cpp b/clang/lib/CodeGen/CGCoroutine.cpp index c80bb0e004367..7282c42420657 100644 --- a/clang/lib/CodeGen/CGCoroutine.cpp +++ b/clang/lib/CodeGen/CGCoroutine.cpp @@ -447,6 +447,7 @@ CodeGenFunction::generateAwaitSuspendWrapper(Twine const &CoroName, Fn->setMustProgress(); Fn->addFnAttr(llvm::Attribute::AttrKind::AlwaysInline); + Fn->addFnAttr("sample-profile-suffix-elision-policy", "selected"); StartFunction(GlobalDecl(), ReturnTy, Fn, FI, args); diff --git a/clang/test/CodeGenCoroutines/coro-attributes.cpp b/clang/test/CodeGenCoroutines/coro-attributes.cpp index 8f171771a8cbc..2dfb6cc052ce9 100644 --- a/clang/test/CodeGenCoroutines/coro-attributes.cpp +++ b/clang/test/CodeGenCoroutines/coro-attributes.cpp @@ -15,8 +15,12 @@ struct coro { // CHECK: void @_Z3foov() #[[FOO_ATTR_NUM:[0-9]+]] // CHECK: declare token @llvm.coro.save(ptr) #[[SAVE_ATTR_NUM:[0-9]+]] +// CHECK: void @_Z3foov.__await_suspend_wrapper__init({{.*}}) #[[WRAPPER_ATTR_NUM:[0-9]+]] +// CHECK: void @_Z3foov.__await_suspend_wrapper__await({{.*}}) #[[WRAPPER_ATTR_NUM:[0-9]+]] +// CHECK: void @_Z3foov.__await_suspend_wrapper__final({{.*}}) #[[WRAPPER_ATTR_NUM:[0-9]+]] // CHECK: attributes #[[FOO_ATTR_NUM]] = { {{.*}} presplitcoroutine // CHECK: attributes #[[SAVE_ATTR_NUM]] = { {{.*}}nomerge +// CHECK: attributes #[[WRAPPER_ATTR_NUM]] = { {{.*}}"sample-profile-suffix-elision-policy"="selected" coro foo() { co_await suspend_always{}; } `````````` </details> https://github.com/llvm/llvm-project/pull/174881 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
