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