[llvm] r241220 - Add a routine to TargetTransformInfo that will allow targets to look

Eric Christopher echristo at gmail.com
Wed Jul 1 18:28:26 PDT 2015


On Wed, Jul 1, 2015 at 6:26 PM David Blaikie <dblaikie at gmail.com> wrote:

> 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)
>
>
Naming is hard. No particular preference here so if you like this one I'll
happily change it :)


> Otherwise, can the attribute set/list/container be passed directly, not
> exposing the whole function to TTI?
>
>

They could look at other properties, also if you take a look at the x86 one
it makes it a bit more obvious that I'm using the function to get parsed
subtarget attributes there.

-eric


> +
>>    /// @}
>>
>>  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/20150702/f485b7e7/attachment.html>


More information about the llvm-commits mailing list