diff options
Diffstat (limited to 'lib/Transforms/IPO')
| -rw-r--r-- | lib/Transforms/IPO/ArgumentPromotion.cpp | 8 | ||||
| -rw-r--r-- | lib/Transforms/IPO/FunctionAttrs.cpp | 6 | ||||
| -rw-r--r-- | lib/Transforms/IPO/PartialInlining.cpp | 10 |
3 files changed, 17 insertions, 7 deletions
diff --git a/lib/Transforms/IPO/ArgumentPromotion.cpp b/lib/Transforms/IPO/ArgumentPromotion.cpp index 25db0eff8848..6408cad08d55 100644 --- a/lib/Transforms/IPO/ArgumentPromotion.cpp +++ b/lib/Transforms/IPO/ArgumentPromotion.cpp @@ -839,12 +839,12 @@ promoteArguments(Function *F, function_ref<AAResults &(Function &F)> AARGetter, // avoiding a register copy. if (PtrArg->hasStructRetAttr()) { unsigned ArgNo = PtrArg->getArgNo(); - F->removeAttribute(ArgNo + 1, Attribute::StructRet); - F->addAttribute(ArgNo + 1, Attribute::NoAlias); + F->removeParamAttr(ArgNo, Attribute::StructRet); + F->addParamAttr(ArgNo, Attribute::NoAlias); for (Use &U : F->uses()) { CallSite CS(U.getUser()); - CS.removeAttribute(ArgNo + 1, Attribute::StructRet); - CS.addAttribute(ArgNo + 1, Attribute::NoAlias); + CS.removeParamAttr(ArgNo, Attribute::StructRet); + CS.addParamAttr(ArgNo, Attribute::NoAlias); } } diff --git a/lib/Transforms/IPO/FunctionAttrs.cpp b/lib/Transforms/IPO/FunctionAttrs.cpp index 031c3d8a9ebe..28cc81c76d4f 100644 --- a/lib/Transforms/IPO/FunctionAttrs.cpp +++ b/lib/Transforms/IPO/FunctionAttrs.cpp @@ -835,7 +835,7 @@ static bool addNoAliasAttrs(const SCCNodeSet &SCCNodes) { // pointers. for (Function *F : SCCNodes) { // Already noalias. - if (F->doesNotAlias(0)) + if (F->returnDoesNotAlias()) continue; // We can infer and propagate function attributes only when we know that the @@ -855,11 +855,11 @@ static bool addNoAliasAttrs(const SCCNodeSet &SCCNodes) { bool MadeChange = false; for (Function *F : SCCNodes) { - if (F->doesNotAlias(AttributeList::ReturnIndex) || + if (F->returnDoesNotAlias() || !F->getReturnType()->isPointerTy()) continue; - F->setDoesNotAlias(AttributeList::ReturnIndex); + F->setReturnDoesNotAlias(); ++NumNoAlias; MadeChange = true; } diff --git a/lib/Transforms/IPO/PartialInlining.cpp b/lib/Transforms/IPO/PartialInlining.cpp index 1bb9d654ec1c..2db47b3b5622 100644 --- a/lib/Transforms/IPO/PartialInlining.cpp +++ b/lib/Transforms/IPO/PartialInlining.cpp @@ -337,6 +337,16 @@ Function *PartialInlinerImpl::unswitchFunction(Function *F) { if (F->hasAddressTaken()) return nullptr; + // Let inliner handle it + if (F->hasFnAttribute(Attribute::AlwaysInline)) + return nullptr; + + if (F->hasFnAttribute(Attribute::NoInline)) + return nullptr; + + if (PSI->isFunctionEntryCold(F)) + return nullptr; + std::unique_ptr<FunctionOutliningInfo> OutliningInfo = computeOutliningInfo(F); |
