diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2014-01-26 06:06:37 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2014-01-26 06:06:37 +0000 |
commit | 24ea09ef7d775934ef79b4a7cf871ecc2e501a88 (patch) | |
tree | b0727927bd4b21c0c92251f57f61d7abe639d1b6 /llvm/lib/Target/Sparc | |
parent | 56c4611340cbcf6a9a703abaec220e81c71a84a8 (diff) | |
download | bcm5719-llvm-24ea09ef7d775934ef79b4a7cf871ecc2e501a88.tar.gz bcm5719-llvm-24ea09ef7d775934ef79b4a7cf871ecc2e501a88.zip |
Construct the MCStreamer before constructing the MCTargetStreamer.
This has a few advantages:
* Only targets that use a MCTargetStreamer have to worry about it.
* There is never a MCTargetStreamer without a MCStreamer, so we can use a
reference.
* A MCTargetStreamer can talk to the MCStreamer in its constructor.
llvm-svn: 200129
Diffstat (limited to 'llvm/lib/Target/Sparc')
-rw-r--r-- | llvm/lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.cpp | 15 | ||||
-rw-r--r-- | llvm/lib/Target/Sparc/MCTargetDesc/SparcTargetStreamer.cpp | 12 | ||||
-rw-r--r-- | llvm/lib/Target/Sparc/SparcTargetStreamer.h | 4 |
3 files changed, 21 insertions, 10 deletions
diff --git a/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.cpp b/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.cpp index 2dbfff2014a..97d1dae4c80 100644 --- a/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.cpp +++ b/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.cpp @@ -105,8 +105,10 @@ static MCStreamer *createMCStreamer(const Target &T, StringRef TT, MCContext &Context, MCAsmBackend &MAB, raw_ostream &OS, MCCodeEmitter *Emitter, bool RelaxAll, bool NoExecStack) { - SparcTargetELFStreamer *S = new SparcTargetELFStreamer(); - return createELFStreamer(Context, S, MAB, OS, Emitter, RelaxAll, NoExecStack); + MCStreamer *S = + createELFStreamer(Context, MAB, OS, Emitter, RelaxAll, NoExecStack); + new SparcTargetELFStreamer(*S); + return S; } static MCStreamer * @@ -114,11 +116,12 @@ createMCAsmStreamer(MCContext &Ctx, formatted_raw_ostream &OS, bool isVerboseAsm, bool useLoc, bool useCFI, bool useDwarfDirectory, MCInstPrinter *InstPrint, MCCodeEmitter *CE, MCAsmBackend *TAB, bool ShowInst) { - SparcTargetAsmStreamer *S = new SparcTargetAsmStreamer(OS); - return llvm::createAsmStreamer(Ctx, S, OS, isVerboseAsm, useLoc, useCFI, - useDwarfDirectory, InstPrint, CE, TAB, - ShowInst); + MCStreamer *S = + llvm::createAsmStreamer(Ctx, OS, isVerboseAsm, useLoc, useCFI, + useDwarfDirectory, InstPrint, CE, TAB, ShowInst); + new SparcTargetAsmStreamer(*S, OS); + return S; } static MCInstPrinter *createSparcMCInstPrinter(const Target &T, diff --git a/llvm/lib/Target/Sparc/MCTargetDesc/SparcTargetStreamer.cpp b/llvm/lib/Target/Sparc/MCTargetDesc/SparcTargetStreamer.cpp index 01043aed5ee..94af791e0e7 100644 --- a/llvm/lib/Target/Sparc/MCTargetDesc/SparcTargetStreamer.cpp +++ b/llvm/lib/Target/Sparc/MCTargetDesc/SparcTargetStreamer.cpp @@ -18,10 +18,13 @@ using namespace llvm; // pin vtable to this file +SparcTargetStreamer::SparcTargetStreamer(MCStreamer &S) : MCTargetStreamer(S) {} + void SparcTargetStreamer::anchor() {} -SparcTargetAsmStreamer::SparcTargetAsmStreamer(formatted_raw_ostream &OS) - : OS(OS) {} +SparcTargetAsmStreamer::SparcTargetAsmStreamer(MCStreamer &S, + formatted_raw_ostream &OS) + : SparcTargetStreamer(S), OS(OS) {} void SparcTargetAsmStreamer::emitSparcRegisterIgnore(unsigned reg) { OS << "\t.register " @@ -35,6 +38,9 @@ void SparcTargetAsmStreamer::emitSparcRegisterScratch(unsigned reg) { << ", #scratch\n"; } +SparcTargetELFStreamer::SparcTargetELFStreamer(MCStreamer &S) + : SparcTargetStreamer(S) {} + MCELFStreamer &SparcTargetELFStreamer::getStreamer() { - return static_cast<MCELFStreamer &>(*Streamer); + return static_cast<MCELFStreamer &>(Streamer); } diff --git a/llvm/lib/Target/Sparc/SparcTargetStreamer.h b/llvm/lib/Target/Sparc/SparcTargetStreamer.h index 73339acf8df..503ebd969c1 100644 --- a/llvm/lib/Target/Sparc/SparcTargetStreamer.h +++ b/llvm/lib/Target/Sparc/SparcTargetStreamer.h @@ -18,6 +18,7 @@ class SparcTargetStreamer : public MCTargetStreamer { virtual void anchor(); public: + SparcTargetStreamer(MCStreamer &S); /// Emit ".register <reg>, #ignore". virtual void emitSparcRegisterIgnore(unsigned reg) = 0; /// Emit ".register <reg>, #scratch". @@ -29,7 +30,7 @@ class SparcTargetAsmStreamer : public SparcTargetStreamer { formatted_raw_ostream &OS; public: - SparcTargetAsmStreamer(formatted_raw_ostream &OS); + SparcTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS); virtual void emitSparcRegisterIgnore(unsigned reg); virtual void emitSparcRegisterScratch(unsigned reg); @@ -38,6 +39,7 @@ public: // This part is for ELF object output class SparcTargetELFStreamer : public SparcTargetStreamer { public: + SparcTargetELFStreamer(MCStreamer &S); MCELFStreamer &getStreamer(); virtual void emitSparcRegisterIgnore(unsigned reg) {} virtual void emitSparcRegisterScratch(unsigned reg) {} |