[llvm] r343663 - Improve static analysis of cold basic blocks
Aditya Kumar via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 2 23:21:05 PDT 2018
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) {
+ 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";
+}
+
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.
More information about the llvm-commits
mailing list