[llvm] r270246 - [X86] Reduce memory allocations in X86TargetMachine::getSubtargetImpl
Benjamin Kramer via llvm-commits
llvm-commits at lists.llvm.org
Fri May 20 11:33:45 PDT 2016
On Fri, May 20, 2016 at 8:17 PM, David Majnemer via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> Author: majnemer
> Date: Fri May 20 13:16:06 2016
> New Revision: 270246
>
> URL: http://llvm.org/viewvc/llvm-project?rev=270246&view=rev
> Log:
> [X86] Reduce memory allocations in X86TargetMachine::getSubtargetImpl
>
> We performed a number of memory allocations each time getTTI was called,
> remove them by using SmallString.
> No functionality change intended.
>
> Modified:
> llvm/trunk/lib/Target/X86/X86Subtarget.cpp
> llvm/trunk/lib/Target/X86/X86Subtarget.h
> llvm/trunk/lib/Target/X86/X86TargetMachine.cpp
>
> Modified: llvm/trunk/lib/Target/X86/X86Subtarget.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.cpp?rev=270246&r1=270245&r2=270246&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86Subtarget.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86Subtarget.cpp Fri May 20 13:16:06 2016
> @@ -353,8 +353,8 @@ X86Subtarget &X86Subtarget::initializeSu
> return *this;
> }
>
> -X86Subtarget::X86Subtarget(const Triple &TT, const std::string &CPU,
> - const std::string &FS, const X86TargetMachine &TM,
> +X86Subtarget::X86Subtarget(const Triple &TT, StringRef CPU, StringRef FS,
> + const X86TargetMachine &TM,
> unsigned StackAlignOverride)
> : X86GenSubtargetInfo(TT, CPU, FS), X86ProcFamily(Others),
> PICStyle(PICStyles::None), TM(TM), TargetTriple(TT),
>
> Modified: llvm/trunk/lib/Target/X86/X86Subtarget.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.h?rev=270246&r1=270245&r2=270246&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86Subtarget.h (original)
> +++ llvm/trunk/lib/Target/X86/X86Subtarget.h Fri May 20 13:16:06 2016
> @@ -313,7 +313,7 @@ public:
> /// This constructor initializes the data members to match that
> /// of the specified triple.
> ///
> - X86Subtarget(const Triple &TT, const std::string &CPU, const std::string &FS,
> + X86Subtarget(const Triple &TT, StringRef CPU, StringRef FS,
> const X86TargetMachine &TM, unsigned StackAlignOverride);
>
> const X86TargetLowering *getTargetLowering() const override {
>
> Modified: llvm/trunk/lib/Target/X86/X86TargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetMachine.cpp?rev=270246&r1=270245&r2=270246&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86TargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86TargetMachine.cpp Fri May 20 13:16:06 2016
> @@ -182,12 +182,12 @@ X86TargetMachine::getSubtargetImpl(const
> Attribute CPUAttr = F.getFnAttribute("target-cpu");
> Attribute FSAttr = F.getFnAttribute("target-features");
>
> - std::string CPU = !CPUAttr.hasAttribute(Attribute::None)
> - ? CPUAttr.getValueAsString().str()
> - : TargetCPU;
> - std::string FS = !FSAttr.hasAttribute(Attribute::None)
> - ? FSAttr.getValueAsString().str()
> - : TargetFS;
> + SmallString<32> CPU = !CPUAttr.hasAttribute(Attribute::None)
> + ? CPUAttr.getValueAsString()
> + : (StringRef)TargetCPU;
This could be a StringRef, conserves precious stack space and avoids a copy.
> + SmallString<512> FS = !FSAttr.hasAttribute(Attribute::None)
> + ? FSAttr.getValueAsString()
> + : (StringRef)TargetFS;
same, but then append directly to Key instead of FS below for the
softfloat stuff.
>
> // FIXME: This is related to the code below to reset the target options,
> // we need to know whether or not the soft float flag is set on the
> @@ -201,7 +201,12 @@ X86TargetMachine::getSubtargetImpl(const
> if (SoftFloat)
> FS += FS.empty() ? "+soft-float" : ",+soft-float";
>
> - auto &I = SubtargetMap[CPU + FS];
> + SmallString<544> Key;
512+32 = not a round number :(
> + Key.reserve(CPU.size() + FS.size());
> + Key += CPU;
> + Key += FS;
> +
> + auto &I = SubtargetMap[Key];
> if (!I) {
> // This needs to be done before we create a new subtarget since any
> // creation will depend on the TM and the code generation flags on the
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list