diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2010-12-03 00:55:40 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2010-12-03 00:55:40 +0000 |
commit | 32a006e606742b1c5401e49607e33717bb5441f0 (patch) | |
tree | a0f3328f54b7df420f636fcd4ece07f4accd2f6c /include/llvm/MC | |
parent | 0bdf0c05b990b4f2d29719b34f4ce44f16176f09 (diff) | |
download | external_llvm-32a006e606742b1c5401e49607e33717bb5441f0.zip external_llvm-32a006e606742b1c5401e49607e33717bb5441f0.tar.gz external_llvm-32a006e606742b1c5401e49607e33717bb5441f0.tar.bz2 |
Try to resolve symbol differences early, and if successful create a plain
data fragment. This reduces the time to assemble the test in 8711 from 60s to
54s.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120767 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/MC')
-rw-r--r-- | include/llvm/MC/MCDwarf.h | 1 | ||||
-rw-r--r-- | include/llvm/MC/MCExpr.h | 10 | ||||
-rw-r--r-- | include/llvm/MC/MCObjectStreamer.h | 3 | ||||
-rw-r--r-- | include/llvm/MC/MCStreamer.h | 7 |
4 files changed, 18 insertions, 3 deletions
diff --git a/include/llvm/MC/MCDwarf.h b/include/llvm/MC/MCDwarf.h index 0c0a22e..d528ac5 100644 --- a/include/llvm/MC/MCDwarf.h +++ b/include/llvm/MC/MCDwarf.h @@ -209,7 +209,6 @@ namespace llvm { // This emits the Dwarf file and the line tables. // static void Emit(MCStreamer *MCOS, const MCSection *DwarfLineSection, - MCSectionData *DLS, int PointerSize, const MCSection *TextSection = NULL); }; diff --git a/include/llvm/MC/MCExpr.h b/include/llvm/MC/MCExpr.h index fc9d18b..e953a11 100644 --- a/include/llvm/MC/MCExpr.h +++ b/include/llvm/MC/MCExpr.h @@ -16,6 +16,7 @@ namespace llvm { class MCAsmInfo; class MCAsmLayout; +class MCAssembler; class MCContext; class MCSymbol; class MCValue; @@ -43,7 +44,8 @@ private: protected: explicit MCExpr(ExprKind _Kind) : Kind(_Kind) {} - bool EvaluateAsRelocatableImpl(MCValue &Res, const MCAsmLayout *Layout, + bool EvaluateAsRelocatableImpl(MCValue &Res, const MCAssembler *Asm, + const MCAsmLayout *Layout, bool InSet) const; public: /// @name Accessors @@ -69,7 +71,11 @@ public: /// values. If not given, then only non-symbolic expressions will be /// evaluated. /// @result - True on success. - bool EvaluateAsAbsolute(int64_t &Res, const MCAsmLayout *Layout = 0) const; + bool EvaluateAsAbsolute(int64_t &Res) const; + bool EvaluateAsAbsolute(int64_t &Res, const MCAssembler *Asm) const; + bool EvaluateAsAbsolute(int64_t &Res, const MCAsmLayout *Layout) const; + bool EvaluateAsAbsolute(int64_t &Res, const MCAssembler *Asm, + const MCAsmLayout *Layout) const; /// EvaluateAsRelocatable - Try to evaluate the expression to a relocatable /// value, i.e. an expression of the fixed form (a - b + constant). diff --git a/include/llvm/MC/MCObjectStreamer.h b/include/llvm/MC/MCObjectStreamer.h index 092bc84..a3f532d 100644 --- a/include/llvm/MC/MCObjectStreamer.h +++ b/include/llvm/MC/MCObjectStreamer.h @@ -69,6 +69,9 @@ public: virtual void EmitInstruction(const MCInst &Inst); virtual void EmitInstToFragment(const MCInst &Inst); virtual void EmitValueToOffset(const MCExpr *Offset, unsigned char Value); + virtual void EmitDwarfAdvanceLineAddr(int64_t LineDelta, + const MCSymbol *LastLabel, + const MCSymbol *Label); virtual void Finish(); /// @} diff --git a/include/llvm/MC/MCStreamer.h b/include/llvm/MC/MCStreamer.h index 4c96b2f..03fd011 100644 --- a/include/llvm/MC/MCStreamer.h +++ b/include/llvm/MC/MCStreamer.h @@ -351,6 +351,13 @@ namespace llvm { unsigned Isa, unsigned Discriminator); + virtual void EmitDwarfAdvanceLineAddr(int64_t LineDelta, + const MCSymbol *LastLabel, + const MCSymbol *Label) = 0; + + void EmitDwarfSetLineAddr(int64_t LineDelta, const MCSymbol *Label, + int PointerSize); + virtual bool EmitCFIStartProc(); virtual bool EmitCFIEndProc(); virtual bool EmitCFIDefCfaOffset(int64_t Offset); |