From: Chris Lattner Date: Sat, 12 Sep 2009 20:45:03 +0000 (+0000) Subject: eliminate the "MBBLabel" MCOperand type, and just use a MCSymbol for X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=b6a2fc080f47eabdcaabf0101e9ca7c95e9d8bdc;p=oota-llvm.git eliminate the "MBBLabel" MCOperand type, and just use a MCSymbol for MBB labels like everything else. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81628 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/MC/MCInst.h b/include/llvm/MC/MCInst.h index 10a896a6688..0fc4d186b97 100644 --- a/include/llvm/MC/MCInst.h +++ b/include/llvm/MC/MCInst.h @@ -31,7 +31,6 @@ class MCOperand { kInvalid, ///< Uninitialized. kRegister, ///< Register operand. kImmediate, ///< Immediate operand. - kMBBLabel, ///< Basic block label. kExpr ///< Relocatable immediate operand. }; unsigned char Kind; @@ -40,10 +39,6 @@ class MCOperand { unsigned RegVal; int64_t ImmVal; const MCExpr *ExprVal; - struct { - unsigned FunctionNo; - unsigned BlockNo; - } MBBLabel; }; public: @@ -53,7 +48,6 @@ public: bool isValid() const { return Kind != kInvalid; } bool isReg() const { return Kind == kRegister; } bool isImm() const { return Kind == kImmediate; } - bool isMBBLabel() const { return Kind == kMBBLabel; } bool isExpr() const { return Kind == kExpr; } /// getReg - Returns the register number. @@ -77,15 +71,6 @@ public: ImmVal = Val; } - unsigned getMBBLabelFunction() const { - assert(isMBBLabel() && "This is not a machine basic block"); - return MBBLabel.FunctionNo; - } - unsigned getMBBLabelBlock() const { - assert(isMBBLabel() && "This is not a machine basic block"); - return MBBLabel.BlockNo; - } - const MCExpr *getExpr() const { assert(isExpr() && "This is not an expression"); return ExprVal; @@ -107,13 +92,6 @@ public: Op.ImmVal = Val; return Op; } - static MCOperand CreateMBBLabel(unsigned Fn, unsigned MBB) { - MCOperand Op; - Op.Kind = kMBBLabel; - Op.MBBLabel.FunctionNo = Fn; - Op.MBBLabel.BlockNo = MBB; - return Op; - } static MCOperand CreateExpr(const MCExpr *Val) { MCOperand Op; Op.Kind = kExpr; diff --git a/lib/MC/MCInst.cpp b/lib/MC/MCInst.cpp index f19056bc9ad..d05031870ad 100644 --- a/lib/MC/MCInst.cpp +++ b/lib/MC/MCInst.cpp @@ -21,9 +21,6 @@ void MCOperand::print(raw_ostream &OS, const MCAsmInfo *MAI) const { OS << "Reg:" << getReg(); else if (isImm()) OS << "Imm:" << getImm(); - else if (isMBBLabel()) - OS << "MBB:(" << getMBBLabelFunction() << "," - << getMBBLabelBlock() << ")"; else if (isExpr()) { OS << "Expr:("; getExpr()->print(OS, MAI); diff --git a/lib/Target/X86/AsmPrinter/X86ATTInstPrinter.cpp b/lib/Target/X86/AsmPrinter/X86ATTInstPrinter.cpp index 9841d708d86..2c0b5689ae7 100644 --- a/lib/Target/X86/AsmPrinter/X86ATTInstPrinter.cpp +++ b/lib/Target/X86/AsmPrinter/X86ATTInstPrinter.cpp @@ -58,11 +58,6 @@ void X86ATTAsmPrinter::print_pcrel_imm(const MCInst *MI, unsigned OpNo) { O << Op.getImm(); else if (Op.isExpr()) Op.getExpr()->print(O, MAI); - else if (Op.isMBBLabel()) - // FIXME: Keep in sync with printBasicBlockLabel. printBasicBlockLabel - // should eventually call into this code, not the other way around. - O << MAI->getPrivateGlobalPrefix() << "BB" << Op.getMBBLabelFunction() - << '_' << Op.getMBBLabelBlock(); else llvm_unreachable("Unknown pcrel immediate operand"); } diff --git a/lib/Target/X86/AsmPrinter/X86MCInstLower.cpp b/lib/Target/X86/AsmPrinter/X86MCInstLower.cpp index ed8207415f5..9946506441b 100644 --- a/lib/Target/X86/AsmPrinter/X86MCInstLower.cpp +++ b/lib/Target/X86/AsmPrinter/X86MCInstLower.cpp @@ -45,6 +45,16 @@ MCSymbol *X86MCInstLower::GetPICBaseSymbol() const { return Ctx.GetOrCreateSymbol(Name.str()); } +MCOperand X86MCInstLower::LowerMBBOperand(const MachineOperand &MO) const { + SmallString<60> Name; + raw_svector_ostream(Name) << AsmPrinter.MAI->getPrivateGlobalPrefix() << "BB" + << AsmPrinter.getFunctionNumber() << '_' << MO.getMBB()->getNumber(); + + MCSymbol *Sym = Ctx.GetOrCreateSymbol(Name.str()); + return MCOperand::CreateExpr(MCSymbolRefExpr::Create(Sym, Ctx)); +} + + /// LowerGlobalAddressOperand - Lower an MO_GlobalAddress operand to an /// MCOperand. @@ -331,9 +341,7 @@ void X86MCInstLower::Lower(const MachineInstr *MI, MCInst &OutMI) const { MCOp = MCOperand::CreateImm(MO.getImm()); break; case MachineOperand::MO_MachineBasicBlock: -// FIXME: Kill MBBLabel operand type! - MCOp = MCOperand::CreateMBBLabel(AsmPrinter.getFunctionNumber(), - MO.getMBB()->getNumber()); + MCOp = LowerMBBOperand(MO); break; case MachineOperand::MO_GlobalAddress: MCOp = LowerSymbolOperand(MO, GetGlobalAddressSymbol(MO)); diff --git a/lib/Target/X86/AsmPrinter/X86MCInstLower.h b/lib/Target/X86/AsmPrinter/X86MCInstLower.h index de85755d723..b7b2bb0eb4c 100644 --- a/lib/Target/X86/AsmPrinter/X86MCInstLower.h +++ b/lib/Target/X86/AsmPrinter/X86MCInstLower.h @@ -37,6 +37,7 @@ public: private: const X86Subtarget &getSubtarget() const; + MCOperand LowerMBBOperand(const MachineOperand &MO) const; MCSymbol *GetGlobalAddressSymbol(const MachineOperand &MO) const; MCSymbol *GetExternalSymbolSymbol(const MachineOperand &MO) const; MCSymbol *GetJumpTableSymbol(const MachineOperand &MO) const;