diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2015-03-19 01:50:16 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2015-03-19 01:50:16 +0000 |
| commit | cd584a809de8824eea9bcd7f5df59f854413cc76 (patch) | |
| tree | c250018fdaa232fe9f5a54f1d731c0f676fd6d3f /llvm/lib/Target/PowerPC/MCTargetDesc | |
| parent | 58e2492f9313953f2e8eb395bb9937b83eec1fbf (diff) | |
| download | bcm5719-llvm-cd584a809de8824eea9bcd7f5df59f854413cc76.tar.gz bcm5719-llvm-cd584a809de8824eea9bcd7f5df59f854413cc76.zip | |
Split the object streamer callback in one per file format.
There are two main advantages to doing this
* Targets that only need to handle one of the formats specially don't have
to worry about the others. For example, x86 now only registers a
constructor for the COFF streamer.
* Changes to the arguments passed to one format constructor will not impact
the other formats.
llvm-svn: 232699
Diffstat (limited to 'llvm/lib/Target/PowerPC/MCTargetDesc')
| -rw-r--r-- | llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp | 29 |
1 files changed, 11 insertions, 18 deletions
diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp index 9cd2aaf499e..2f7a768ddf8 100644 --- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp +++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp @@ -223,22 +223,6 @@ public: }; } -// This is duplicated code. Refactor this. -static MCStreamer *createMCStreamer(const Triple &T, MCContext &Ctx, - MCAsmBackend &MAB, raw_ostream &OS, - MCCodeEmitter *Emitter, - const MCSubtargetInfo &STI, bool RelaxAll) { - if (T.isOSDarwin()) { - MCStreamer *S = createMachOStreamer(Ctx, MAB, OS, Emitter, RelaxAll); - new PPCTargetMachOStreamer(*S); - return S; - } - - MCStreamer *S = createELFStreamer(Ctx, MAB, OS, Emitter, RelaxAll); - new PPCTargetELFStreamer(*S); - return S; -} - static MCTargetStreamer *createAsmTargetStreamer(MCStreamer &S, formatted_raw_ostream &OS, MCInstPrinter *InstPrint, @@ -246,6 +230,14 @@ static MCTargetStreamer *createAsmTargetStreamer(MCStreamer &S, return new PPCTargetAsmStreamer(S, OS); } +static MCTargetStreamer * +createObjectTargetStreamer(MCStreamer &S, const MCSubtargetInfo &STI) { + Triple TT(STI.getTargetTriple()); + if (TT.getObjectFormat() == Triple::ELF) + return new PPCTargetELFStreamer(S); + return new PPCTargetMachOStreamer(S); +} + static MCInstPrinter *createPPCMCInstPrinter(const Target &T, unsigned SyntaxVariant, const MCAsmInfo &MAI, @@ -279,8 +271,9 @@ extern "C" void LLVMInitializePowerPCTargetMC() { // Register the asm backend. TargetRegistry::RegisterMCAsmBackend(*T, createPPCAsmBackend); - // Register the object streamer. - TargetRegistry::RegisterMCObjectStreamer(*T, createMCStreamer); + // Register the object target streamer. + TargetRegistry::RegisterObjectTargetStreamer(*T, + createObjectTargetStreamer); // Register the asm target streamer. TargetRegistry::RegisterAsmTargetStreamer(*T, createAsmTargetStreamer); |

