[llvm] r241220 - Add a routine to TargetTransformInfo that will allow targets to look
David Blaikie
dblaikie at gmail.com
Wed Jul 1 18:26:28 PDT 2015
On Wed, Jul 1, 2015 at 6:11 PM, Eric Christopher <echristo at gmail.com> wrote:
> Author: echristo
> Date: Wed Jul 1 20:11:47 2015
> New Revision: 241220
>
> URL: http://llvm.org/viewvc/llvm-project?rev=241220&view=rev
> Log:
> Add a routine to TargetTransformInfo that will allow targets to look
> at the attributes on a function to determine whether or not to allow
> inlining.
>
> Modified:
> llvm/trunk/include/llvm/Analysis/TargetTransformInfo.h
> llvm/trunk/include/llvm/Analysis/TargetTransformInfoImpl.h
> llvm/trunk/lib/Analysis/IPA/InlineCost.cpp
> llvm/trunk/lib/Analysis/TargetTransformInfo.cpp
>
> Modified: llvm/trunk/include/llvm/Analysis/TargetTransformInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/TargetTransformInfo.h?rev=241220&r1=241219&r2=241220&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/TargetTransformInfo.h (original)
> +++ llvm/trunk/include/llvm/Analysis/TargetTransformInfo.h Wed Jul 1
> 20:11:47 2015
> @@ -519,6 +519,11 @@ public:
> Value *getOrCreateResultFromMemIntrinsic(IntrinsicInst *Inst,
> Type *ExpectedType) const;
>
> + /// \returns True if the two functions have compatible attributes for
> inlining
> + /// purposes.
> + bool hasCompatibleFunctionAttributes(const Function *Caller,
> + const Function *Callee) const;
>
Given that it gets the whole function, perhaps it should be
"areCompatibleFunctions"? (they could look at other properties of the
function)
Otherwise, can the attribute set/list/container be passed directly, not
exposing the whole function to TTI?
> +
> /// @}
>
> private:
> @@ -619,6 +624,8 @@ public:
> MemIntrinsicInfo &Info) = 0;
> virtual Value *getOrCreateResultFromMemIntrinsic(IntrinsicInst *Inst,
> Type *ExpectedType) =
> 0;
> + virtual bool hasCompatibleFunctionAttributes(const Function *Caller,
> + const Function *Callee)
> const = 0;
> };
>
> template <typename T>
> @@ -804,6 +811,10 @@ public:
> Type *ExpectedType) override {
> return Impl.getOrCreateResultFromMemIntrinsic(Inst, ExpectedType);
> }
> + bool hasCompatibleFunctionAttributes(const Function *Caller,
> + const Function *Callee) const
> override {
> + return Impl.hasCompatibleFunctionAttributes(Caller, Callee);
> + }
> };
>
> template <typename T>
>
> Modified: llvm/trunk/include/llvm/Analysis/TargetTransformInfoImpl.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/TargetTransformInfoImpl.h?rev=241220&r1=241219&r2=241220&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/TargetTransformInfoImpl.h (original)
> +++ llvm/trunk/include/llvm/Analysis/TargetTransformInfoImpl.h Wed Jul 1
> 20:11:47 2015
> @@ -335,6 +335,14 @@ public:
> Type *ExpectedType) {
> return nullptr;
> }
> +
> + bool hasCompatibleFunctionAttributes(const Function *Caller,
> + const Function *Callee) const {
> + return (Caller->getFnAttribute("target-cpu") ==
> + Callee->getFnAttribute("target-cpu")) &&
> + (Caller->getFnAttribute("target-features") ==
> + Callee->getFnAttribute("target-features"));
> + }
> };
>
> /// \brief CRTP base class for use as a mix-in that aids implementing
>
> Modified: llvm/trunk/lib/Analysis/IPA/InlineCost.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/IPA/InlineCost.cpp?rev=241220&r1=241219&r2=241220&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Analysis/IPA/InlineCost.cpp (original)
> +++ llvm/trunk/lib/Analysis/IPA/InlineCost.cpp Wed Jul 1 20:11:47 2015
> @@ -1344,9 +1344,9 @@ static bool attributeMatches(Function *F
> /// \brief Test that there are no attribute conflicts between Caller and
> Callee
> /// that prevent inlining.
> static bool functionsHaveCompatibleAttributes(Function *Caller,
> - Function *Callee) {
> - return attributeMatches(Caller, Callee, "target-cpu") &&
> - attributeMatches(Caller, Callee, "target-features") &&
> + Function *Callee,
> + TargetTransformInfo &TTI) {
> + return TTI.hasCompatibleFunctionAttributes(Caller, Callee) &&
> attributeMatches(Caller, Callee, Attribute::SanitizeAddress) &&
> attributeMatches(Caller, Callee, Attribute::SanitizeMemory) &&
> attributeMatches(Caller, Callee, Attribute::SanitizeThread);
> @@ -1368,7 +1368,8 @@ InlineCost InlineCostAnalysis::getInline
>
> // Never inline functions with conflicting attributes (unless callee has
> // always-inline attribute).
> - if (!functionsHaveCompatibleAttributes(CS.getCaller(), Callee))
> + if (!functionsHaveCompatibleAttributes(CS.getCaller(), Callee,
> + TTIWP->getTTI(*Callee)))
> return llvm::InlineCost::getNever();
>
> // Don't inline this call if the caller has the optnone attribute.
>
> Modified: llvm/trunk/lib/Analysis/TargetTransformInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/TargetTransformInfo.cpp?rev=241220&r1=241219&r2=241220&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Analysis/TargetTransformInfo.cpp (original)
> +++ llvm/trunk/lib/Analysis/TargetTransformInfo.cpp Wed Jul 1 20:11:47
> 2015
> @@ -284,6 +284,11 @@ Value *TargetTransformInfo::getOrCreateR
> return TTIImpl->getOrCreateResultFromMemIntrinsic(Inst, ExpectedType);
> }
>
> +bool TargetTransformInfo::hasCompatibleFunctionAttributes(
> + const Function *Caller, const Function *Callee) const {
> + return TTIImpl->hasCompatibleFunctionAttributes(Caller, Callee);
> +}
> +
> TargetTransformInfo::Concept::~Concept() {}
>
> TargetIRAnalysis::TargetIRAnalysis() : TTICallback(&getDefaultTTI) {}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150701/2fac24df/attachment.html>
More information about the llvm-commits
mailing list