[llvm] r237876 - AsmPrinter: Compute absolute label difference directly

Eric Christopher echristo at gmail.com
Thu Jun 4 12:57:28 PDT 2015


Sure, I hadn't changed the name originally because I figured it might be of
more general use.

-eric

On Thu, Jun 4, 2015 at 12:51 PM David Blaikie <dblaikie at gmail.com> wrote:

> On Thu, Jun 4, 2015 at 12:22 PM, Duncan P. N. Exon Smith <
> dexonsmith at apple.com> wrote:
>
>>
>> > On 2015-Jun-04, at 11:48, David Blaikie <dblaikie at gmail.com> wrote:
>> >
>> >
>> >
>> > On Wed, May 20, 2015 at 7:41 PM, Duncan P. N. Exon Smith <
>> dexonsmith at apple.com> wrote:
>> > Author: dexonsmith
>> > Date: Wed May 20 21:41:23 2015
>> > New Revision: 237876
>> >
>> > URL: http://llvm.org/viewvc/llvm-project?rev=237876&view=rev
>> <https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D237876-26view-3Drev&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=FwMMt-3Vsc6muSaSmplxEyaSeMLzoVZ8f8tn0XzJI0M&s=QLrXw0HKOGWDxnIiS6uM4dswkftifDTNC5npVn-1pvg&e=>
>> > Log:
>> > AsmPrinter: Compute absolute label difference directly
>> >
>> > Create a low-overhead path for `EmitLabelDifference()` that emits a
>> > emits an absolute number when (1) the output is an object stream and (2)
>> > the two symbols are in the same data fragment.
>> >
>> > This drops memory usage on Mach-O from 975 MB down to 919 MB (5.8%).
>> > The only call is when `!doesDwarfUseRelocationsAcrossSections()` --
>> > i.e., on Mach-O -- since otherwise an absolute offset from the start of
>> > the section needs a relocation.  (`EmitLabelDifference()` is cheaper on
>> > ELF anyway, since it creates 1 fewer temp symbol, and it gets called far
>> > less often.  It's not clear to me if this is even a bottleneck there.)
>> >
>> > (I'm looking at `llc` memory usage on `verify-uselistorder.lto.opt.bc`;
>> > see r236629 for details.)
>> >
>> > Modified:
>> >     llvm/trunk/include/llvm/MC/MCObjectStreamer.h
>> >     llvm/trunk/include/llvm/MC/MCStreamer.h
>> >     llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
>> >     llvm/trunk/lib/MC/MCObjectStreamer.cpp
>> >
>> > Modified: llvm/trunk/include/llvm/MC/MCObjectStreamer.h
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCObjectStreamer.h?rev=237876&r1=237875&r2=237876&view=diff
>> <https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_include_llvm_MC_MCObjectStreamer.h-3Frev-3D237876-26r1-3D237875-26r2-3D237876-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=FwMMt-3Vsc6muSaSmplxEyaSeMLzoVZ8f8tn0XzJI0M&s=jZHvzgOC6VXDSUagrVCc7RkNyVf3K-cHoUkjivvvp9k&e=>
>> >
>> ==============================================================================
>> > --- llvm/trunk/include/llvm/MC/MCObjectStreamer.h (original)
>> > +++ llvm/trunk/include/llvm/MC/MCObjectStreamer.h Wed May 20 21:41:23
>> 2015
>> > @@ -136,6 +136,17 @@ public:
>> >    void EmitZeros(uint64_t NumBytes) override;
>> >    void FinishImpl() override;
>> >
>> > +  /// Emit the absolute difference between two symbols if possible.
>> > +  ///
>> > +  /// Emit the absolute difference between \c Hi and \c Lo, as long as
>> we can
>> > +  /// compute it.  Currently, that requires that both symbols are in
>> the same
>> > +  /// data fragment.  Otherwise, do nothing and return \c false.
>> > +  ///
>> > +  /// \pre Offset of \c Hi is greater than the offset \c Lo.
>> > +  /// \return true on success.
>> > +  bool emitAbsoluteSymbolDiff(const MCSymbol *Hi, const MCSymbol *Lo,
>> > +                              unsigned Size) override;
>> > +
>> >    bool mayHaveInstructions() const override {
>> >      return getCurrentSectionData()->hasInstructions();
>> >    }
>> >
>> > Modified: llvm/trunk/include/llvm/MC/MCStreamer.h
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCStreamer.h?rev=237876&r1=237875&r2=237876&view=diff
>> <https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_include_llvm_MC_MCStreamer.h-3Frev-3D237876-26r1-3D237875-26r2-3D237876-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=FwMMt-3Vsc6muSaSmplxEyaSeMLzoVZ8f8tn0XzJI0M&s=5BguMbNBwDH0LeKTbgpVqqJPLgz3Oe2YnKXRZaR-DJY&e=>
>> >
>> ==============================================================================
>> > --- llvm/trunk/include/llvm/MC/MCStreamer.h (original)
>> > +++ llvm/trunk/include/llvm/MC/MCStreamer.h Wed May 20 21:41:23 2015
>> > @@ -652,6 +652,15 @@ public:
>> >                                       unsigned Isa, unsigned
>> Discriminator,
>> >                                       StringRef FileName);
>> >
>> > +  /// Emit the absolute difference between two symbols if possible.
>> > +  ///
>> > +  /// \pre Offset of \c Hi is greater than the offset \c Lo.
>> > +  /// \return true on success.
>> > +  virtual bool emitAbsoluteSymbolDiff(const MCSymbol *Hi, const
>> MCSymbol *Lo,
>> > +                                      unsigned Size) {
>> > +    return false;
>> > +  }
>> > +
>> >    virtual MCSymbol *getDwarfLineTableSymbol(unsigned CUID);
>> >    virtual void EmitCFISections(bool EH, bool Debug);
>> >    void EmitCFIStartProc(bool IsSimple);
>> >
>> > Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=237876&r1=237875&r2=237876&view=diff
>> <https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_CodeGen_AsmPrinter_AsmPrinter.cpp-3Frev-3D237876-26r1-3D237875-26r2-3D237876-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=FwMMt-3Vsc6muSaSmplxEyaSeMLzoVZ8f8tn0XzJI0M&s=O8Op_UBraz25g5F4ZH5fWKJaGZ_uRftcLajoAPKiE1o&e=>
>> >
>> ==============================================================================
>> > --- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp (original)
>> > +++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp Wed May 20
>> 21:41:23 2015
>> > @@ -1591,6 +1591,10 @@ void AsmPrinter::EmitInt32(int Value) co
>> >  /// .set if it avoids relocations.
>> >  void AsmPrinter::EmitLabelDifference(const MCSymbol *Hi, const
>> MCSymbol *Lo,
>> >                                       unsigned Size) const {
>> >
>> > Is this function only used for DWARF emission? It seems sufficiently
>> generally named that that's not obvious & could be surprising for other
>> users to find this \/ behavior?
>> >
>>
>> Yes, it's only used for DWARF emission; at least, I looked, and only
>> found DWARF callers.  I'll look into changing the name.  I agree it's
>> confusing.
>>
>
> Wonder what we use for label difference in inline asm or other things,
> then... *shrug*
>
>
>>
>> Any suggestions?  Maybe, `emitDwarfLabelDifference()`?
>
>
> Sounds plausible - can we assert that it's in one of the blessed sections
> that MachO doesn't link into the executable, too?
>
>
> _______________________________________________
> 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/20150604/ad8dfa05/attachment.html>


More information about the llvm-commits mailing list