[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