[Mips] Add a target streamer when creating a null streamer.

Should fix DebugInfo/global.ll on the mips bot.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211527 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Rafael Espindola 2014-06-23 19:43:40 +00:00
parent 9dd6fee485
commit 5e761eb4ae
4 changed files with 75 additions and 31 deletions

View File

@ -133,6 +133,12 @@ createMCAsmStreamer(MCContext &Ctx, formatted_raw_ostream &OS,
return S; return S;
} }
static MCStreamer *createMipsNullStreamer(MCContext &Ctx) {
MCStreamer *S = llvm::createNullStreamer(Ctx);
new MipsTargetStreamer(*S);
return S;
}
extern "C" void LLVMInitializeMipsTargetMC() { extern "C" void LLVMInitializeMipsTargetMC() {
// Register the MC asm info. // Register the MC asm info.
RegisterMCAsmInfoFn X(TheMipsTarget, createMipsMCAsmInfo); RegisterMCAsmInfoFn X(TheMipsTarget, createMipsMCAsmInfo);
@ -187,6 +193,12 @@ extern "C" void LLVMInitializeMipsTargetMC() {
TargetRegistry::RegisterAsmStreamer(TheMips64Target, createMCAsmStreamer); TargetRegistry::RegisterAsmStreamer(TheMips64Target, createMCAsmStreamer);
TargetRegistry::RegisterAsmStreamer(TheMips64elTarget, createMCAsmStreamer); TargetRegistry::RegisterAsmStreamer(TheMips64elTarget, createMCAsmStreamer);
TargetRegistry::RegisterNullStreamer(TheMipsTarget, createMipsNullStreamer);
TargetRegistry::RegisterNullStreamer(TheMipselTarget, createMipsNullStreamer);
TargetRegistry::RegisterNullStreamer(TheMips64Target, createMipsNullStreamer);
TargetRegistry::RegisterNullStreamer(TheMips64elTarget,
createMipsNullStreamer);
// Register the asm backend. // Register the asm backend.
TargetRegistry::RegisterMCAsmBackend(TheMipsTarget, TargetRegistry::RegisterMCAsmBackend(TheMipsTarget,
createMipsAsmBackendEB32); createMipsAsmBackendEB32);

View File

@ -27,10 +27,37 @@
using namespace llvm; using namespace llvm;
// Pin vtable to this file.
void MipsTargetStreamer::anchor() {}
MipsTargetStreamer::MipsTargetStreamer(MCStreamer &S) : MCTargetStreamer(S) {} MipsTargetStreamer::MipsTargetStreamer(MCStreamer &S) : MCTargetStreamer(S) {}
void MipsTargetStreamer::emitDirectiveSetMicroMips() {}
void MipsTargetStreamer::emitDirectiveSetNoMicroMips() {}
void MipsTargetStreamer::emitDirectiveSetMips16() {}
void MipsTargetStreamer::emitDirectiveSetNoMips16() {}
void MipsTargetStreamer::emitDirectiveSetReorder() {}
void MipsTargetStreamer::emitDirectiveSetNoReorder() {}
void MipsTargetStreamer::emitDirectiveSetMacro() {}
void MipsTargetStreamer::emitDirectiveSetNoMacro() {}
void MipsTargetStreamer::emitDirectiveSetAt() {}
void MipsTargetStreamer::emitDirectiveSetNoAt() {}
void MipsTargetStreamer::emitDirectiveEnd(StringRef Name) {}
void MipsTargetStreamer::emitDirectiveEnt(const MCSymbol &Symbol) {}
void MipsTargetStreamer::emitDirectiveAbiCalls() {}
void MipsTargetStreamer::emitDirectiveNaN2008() {}
void MipsTargetStreamer::emitDirectiveNaNLegacy() {}
void MipsTargetStreamer::emitDirectiveOptionPic0() {}
void MipsTargetStreamer::emitDirectiveOptionPic2() {}
void MipsTargetStreamer::emitFrame(unsigned StackReg, unsigned StackSize,
unsigned ReturnReg) {}
void MipsTargetStreamer::emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff) {}
void MipsTargetStreamer::emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff) {
}
void MipsTargetStreamer::emitDirectiveSetMips32R2() {}
void MipsTargetStreamer::emitDirectiveSetMips64() {}
void MipsTargetStreamer::emitDirectiveSetMips64R2() {}
void MipsTargetStreamer::emitDirectiveSetDsp() {}
void MipsTargetStreamer::emitDirectiveCpload(unsigned RegNo) {}
void MipsTargetStreamer::emitDirectiveCpsetup(unsigned RegNo, int RegOrOffset,
const MCSymbol &Sym, bool IsReg) {
}
MipsTargetAsmStreamer::MipsTargetAsmStreamer(MCStreamer &S, MipsTargetAsmStreamer::MipsTargetAsmStreamer(MCStreamer &S,
formatted_raw_ostream &OS) formatted_raw_ostream &OS)

View File

@ -15,43 +15,41 @@
namespace llvm { namespace llvm {
class MipsTargetStreamer : public MCTargetStreamer { class MipsTargetStreamer : public MCTargetStreamer {
virtual void anchor();
public: public:
MipsTargetStreamer(MCStreamer &S); MipsTargetStreamer(MCStreamer &S);
virtual void emitDirectiveSetMicroMips() = 0; virtual void emitDirectiveSetMicroMips();
virtual void emitDirectiveSetNoMicroMips() = 0; virtual void emitDirectiveSetNoMicroMips();
virtual void emitDirectiveSetMips16() = 0; virtual void emitDirectiveSetMips16();
virtual void emitDirectiveSetNoMips16() = 0; virtual void emitDirectiveSetNoMips16();
virtual void emitDirectiveSetReorder() = 0; virtual void emitDirectiveSetReorder();
virtual void emitDirectiveSetNoReorder() = 0; virtual void emitDirectiveSetNoReorder();
virtual void emitDirectiveSetMacro() = 0; virtual void emitDirectiveSetMacro();
virtual void emitDirectiveSetNoMacro() = 0; virtual void emitDirectiveSetNoMacro();
virtual void emitDirectiveSetAt() = 0; virtual void emitDirectiveSetAt();
virtual void emitDirectiveSetNoAt() = 0; virtual void emitDirectiveSetNoAt();
virtual void emitDirectiveEnd(StringRef Name) = 0; virtual void emitDirectiveEnd(StringRef Name);
virtual void emitDirectiveEnt(const MCSymbol &Symbol) = 0; virtual void emitDirectiveEnt(const MCSymbol &Symbol);
virtual void emitDirectiveAbiCalls() = 0; virtual void emitDirectiveAbiCalls();
virtual void emitDirectiveNaN2008() = 0; virtual void emitDirectiveNaN2008();
virtual void emitDirectiveNaNLegacy() = 0; virtual void emitDirectiveNaNLegacy();
virtual void emitDirectiveOptionPic0() = 0; virtual void emitDirectiveOptionPic0();
virtual void emitDirectiveOptionPic2() = 0; virtual void emitDirectiveOptionPic2();
virtual void emitFrame(unsigned StackReg, unsigned StackSize, virtual void emitFrame(unsigned StackReg, unsigned StackSize,
unsigned ReturnReg) = 0; unsigned ReturnReg);
virtual void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff) = 0; virtual void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff);
virtual void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff) = 0; virtual void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff);
virtual void emitDirectiveSetMips32R2() = 0; virtual void emitDirectiveSetMips32R2();
virtual void emitDirectiveSetMips64() = 0; virtual void emitDirectiveSetMips64();
virtual void emitDirectiveSetMips64R2() = 0; virtual void emitDirectiveSetMips64R2();
virtual void emitDirectiveSetDsp() = 0; virtual void emitDirectiveSetDsp();
// PIC support // PIC support
virtual void emitDirectiveCpload(unsigned RegNo) = 0; virtual void emitDirectiveCpload(unsigned RegNo);
virtual void emitDirectiveCpsetup(unsigned RegNo, int RegOrOffset, virtual void emitDirectiveCpsetup(unsigned RegNo, int RegOrOffset,
const MCSymbol &Sym, bool IsReg) = 0; const MCSymbol &Sym, bool IsReg);
}; };
// This part is for ascii assembly output // This part is for ascii assembly output

View File

@ -0,0 +1,7 @@
; Test the null streamer with a terget streamer.
; RUN: llc -O0 -filetype=null -mtriple=mips-linux < %s
define i32 @main() {
entry:
ret i32 0
}