[llvm] r343663 - Improve static analysis of cold basic blocks
Vedant Kumar via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 3 18:36:50 PDT 2018
Hi Aditya,
Thanks for working on this :).
> On Oct 2, 2018, at 11:21 PM, Aditya Kumar via llvm-commits <llvm-commits at lists.llvm.org> wrote:
>
> Author: hiraditya
> Date: Tue Oct 2 23:21:05 2018
> New Revision: 343663
>
> URL: http://llvm.org/viewvc/llvm-project?rev=343663&view=rev
> Log:
> Improve static analysis of cold basic blocks
>
> Differential Revision: https://reviews.llvm.org/D52704
>
> Reviewers: sebpop, tejohnson, brzycki, SirishP
> Reviewed By: sebpop
>
> Modified:
> llvm/trunk/lib/Transforms/IPO/HotColdSplitting.cpp
>
> Modified: llvm/trunk/lib/Transforms/IPO/HotColdSplitting.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/HotColdSplitting.cpp?rev=343663&r1=343662&r2=343663&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/IPO/HotColdSplitting.cpp (original)
> +++ llvm/trunk/lib/Transforms/IPO/HotColdSplitting.cpp Tue Oct 2 23:21:05 2018
> @@ -111,6 +111,18 @@ bool blockEndsInUnreachable(const BasicB
> return succ_empty(&BB);
> }
>
> +static bool exceptionHandlingFunctions(const CallInst *CI) {
Could you use verb phrases for function names (see https://www.llvm.org/docs/CodingStandards.html#name-types-functions-variables-and-enumerators-properly <https://www.llvm.org/docs/CodingStandards.html#name-types-functions-variables-and-enumerators-properly>)?
> + auto F = CI->getCalledFunction();
> + if (!F)
> + return false;
> + auto FName = F->getName();
> + return FName == "__cxa_begin_catch" ||
> + FName == "__cxa_free_exception" ||
> + FName == "__cxa_allocate_exception" ||
> + FName == "__cxa_begin_catch" ||
> + FName == "__cxa_end_catch”;
Given how hot this might be, would it make sense to return early if, say, the name doesn’t begin with “__”? Ideally we’d use some sort of off-the-shelf multi-string matching function, but absent that..
thanks,
vedant
> +}
> +
> static
> bool unlikelyExecuted(const BasicBlock &BB) {
> if (blockEndsInUnreachable(BB))
> @@ -122,7 +134,8 @@ bool unlikelyExecuted(const BasicBlock &
> if (const CallInst *CI = dyn_cast<CallInst>(&I)) {
> // The block is cold if it calls functions tagged as cold or noreturn.
> if (CI->hasFnAttr(Attribute::Cold) ||
> - CI->hasFnAttr(Attribute::NoReturn))
> + CI->hasFnAttr(Attribute::NoReturn) ||
> + exceptionHandlingFunctions(CI))
> return true;
>
> // Assume that inline assembly is hot code.
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181003/4575874c/attachment.html>
More information about the llvm-commits
mailing list