diff options
Diffstat (limited to 'llvm/lib/Transforms/Utils/BuildLibCalls.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/BuildLibCalls.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Utils/BuildLibCalls.cpp b/llvm/lib/Transforms/Utils/BuildLibCalls.cpp index 0c45bd8..898e5b0 100644 --- a/llvm/lib/Transforms/Utils/BuildLibCalls.cpp +++ b/llvm/lib/Transforms/Utils/BuildLibCalls.cpp @@ -48,6 +48,7 @@ STATISTIC(NumNoAlias, "Number of function returns inferred as noalias"); STATISTIC(NumNoUndef, "Number of function returns inferred as noundef returns"); STATISTIC(NumReturnedArg, "Number of arguments inferred as returned"); STATISTIC(NumWillReturn, "Number of functions inferred as willreturn"); +STATISTIC(NumCold, "Number of functions inferred as cold"); static bool setDoesNotAccessMemory(Function &F) { if (F.doesNotAccessMemory()) @@ -57,6 +58,14 @@ static bool setDoesNotAccessMemory(Function &F) { return true; } +static bool setIsCold(Function &F) { + if (F.hasFnAttribute(Attribute::Cold)) + return false; + F.addFnAttr(Attribute::Cold); + ++NumCold; + return true; +} + static bool setOnlyAccessesInaccessibleMemory(Function &F) { if (F.onlyAccessesInaccessibleMemory()) return false; @@ -1087,6 +1096,9 @@ bool llvm::inferNonMandatoryLibFuncAttrs(Function &F, Changed |= setOnlyWritesMemory(F, 0); Changed |= setDoesNotThrow(F); break; + case LibFunc_abort: + Changed |= setIsCold(F); + break; // int __nvvm_reflect(const char *) case LibFunc_nvvm_reflect: Changed |= setRetAndArgsNoUndef(F); |