diff options
| author | Chris Lattner <sabre@nondot.org> | 2010-04-03 22:12:35 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2010-04-03 22:12:35 +0000 |
| commit | 1716721df17d300450eac9122d0eb659372f703b (patch) | |
| tree | 8cf9156ea0789adaae1f1e358e62114838b3b8c1 /llvm/lib | |
| parent | aca014e24ee716e0ae9b6d62ec6a86ff2bb6657e (diff) | |
| download | bcm5719-llvm-1716721df17d300450eac9122d0eb659372f703b.tar.gz bcm5719-llvm-1716721df17d300450eac9122d0eb659372f703b.zip | |
add a twine form of MCStreamer::EmitRawText, and mc'ize
a few more things in AsmPrinter.cpp.
llvm-svn: 100294
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 36 | ||||
| -rw-r--r-- | llvm/lib/MC/MCStreamer.cpp | 8 |
2 files changed, 28 insertions, 16 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 5e0d0dc5006..6791633bcfb 100644 --- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -164,7 +164,7 @@ void AsmPrinter::EmitLinkage(unsigned Linkage, MCSymbol *GVSym) const { // .linkonce discard // FIXME: It would be nice to use .linkonce samesize for non-common // globals. - O << LinkOnce; + OutStreamer.EmitRawText(LinkOnce); } else { // .weak _foo OutStreamer.EmitSymbolAttribute(GVSym, MCSA_Weak); @@ -1386,9 +1386,9 @@ void AsmPrinter::printInlineAsm(const MachineInstr *MI) const { if (AsmStr[0] == 0) { if (!OutStreamer.hasRawTextSupport()) return; - OutStreamer.EmitRawText(std::string("\t")+MAI->getCommentString()+ + OutStreamer.EmitRawText(Twine("\t")+MAI->getCommentString()+ MAI->getInlineAsmStart()); - OutStreamer.EmitRawText(std::string("\t")+MAI->getCommentString()+ + OutStreamer.EmitRawText(Twine("\t")+MAI->getCommentString()+ MAI->getInlineAsmEnd()); return; } @@ -1396,7 +1396,7 @@ void AsmPrinter::printInlineAsm(const MachineInstr *MI) const { // Emit the #APP start marker. This has to happen even if verbose-asm isn't // enabled, so we use EmitRawText. if (OutStreamer.hasRawTextSupport()) - OutStreamer.EmitRawText(std::string("\t")+MAI->getCommentString()+ + OutStreamer.EmitRawText(Twine("\t")+MAI->getCommentString()+ MAI->getInlineAsmStart()); // Emit the inline asm to a temporary string so we can emit it through @@ -1584,7 +1584,7 @@ void AsmPrinter::printInlineAsm(const MachineInstr *MI) const { // Emit the #NOAPP end marker. This has to happen even if verbose-asm isn't // enabled, so we use EmitRawText. if (OutStreamer.hasRawTextSupport()) - OutStreamer.EmitRawText(std::string("\t")+MAI->getCommentString()+ + OutStreamer.EmitRawText(Twine("\t")+MAI->getCommentString()+ MAI->getInlineAsmEnd()); } @@ -1592,21 +1592,24 @@ void AsmPrinter::printInlineAsm(const MachineInstr *MI) const { /// that is an implicit def. void AsmPrinter::printImplicitDef(const MachineInstr *MI) const { if (!VerboseAsm) return; - O.PadToColumn(MAI->getCommentColumn()); - O << MAI->getCommentString() << " implicit-def: " - << TRI->getName(MI->getOperand(0).getReg()); + OutStreamer.AddComment(Twine("implicit-def: ") + + TRI->getName(MI->getOperand(0).getReg())); OutStreamer.AddBlankLine(); } void AsmPrinter::printKill(const MachineInstr *MI) const { if (!VerboseAsm) return; O.PadToColumn(MAI->getCommentColumn()); - O << MAI->getCommentString() << " kill:"; + + std::string Str = "kill:"; for (unsigned n = 0, e = MI->getNumOperands(); n != e; ++n) { - const MachineOperand &op = MI->getOperand(n); - assert(op.isReg() && "KILL instruction must have only register operands"); - O << ' ' << TRI->getName(op.getReg()) << (op.isDef() ? "<def>" : "<kill>"); + const MachineOperand &Op = MI->getOperand(n); + assert(Op.isReg() && "KILL instruction must have only register operands"); + Str += ' '; + Str += TRI->getName(Op.getReg()); + Str += (Op.isDef() ? "<def>" : "<kill>"); } + OutStreamer.AddComment(Str); OutStreamer.AddBlankLine(); } @@ -1772,15 +1775,16 @@ void AsmPrinter::EmitBasicBlockStart(const MachineBasicBlock *MBB) const { // Print the main label for the block. if (MBB->pred_empty() || isBlockOnlyReachableByFallthrough(MBB)) { - if (VerboseAsm) { - // NOTE: Want this comment at start of line. - O << MAI->getCommentString() << " BB#" << MBB->getNumber() << ':'; + if (VerboseAsm && OutStreamer.hasRawTextSupport()) { if (const BasicBlock *BB = MBB->getBasicBlock()) if (BB->hasName()) OutStreamer.AddComment("%" + BB->getName()); PrintBasicBlockLoopComments(*MBB, LI, *this); - OutStreamer.AddBlankLine(); + + // NOTE: Want this comment at start of line, don't emit with AddComment. + OutStreamer.EmitRawText(Twine(MAI->getCommentString()) + " BB#" + + Twine(MBB->getNumber()) + ":"); } } else { if (VerboseAsm) { diff --git a/llvm/lib/MC/MCStreamer.cpp b/llvm/lib/MC/MCStreamer.cpp index 0b88b0fe8bc..4f484a27d32 100644 --- a/llvm/lib/MC/MCStreamer.cpp +++ b/llvm/lib/MC/MCStreamer.cpp @@ -10,6 +10,8 @@ #include "llvm/MC/MCStreamer.h" #include "llvm/MC/MCExpr.h" #include "llvm/Support/raw_ostream.h" +#include "llvm/ADT/SmallString.h" +#include "llvm/ADT/Twine.h" #include <cstdlib> using namespace llvm; @@ -54,3 +56,9 @@ void MCStreamer::EmitRawText(StringRef String) { " something must not be fully mc'ized\n"; abort(); } + +void MCStreamer::EmitRawText(const Twine &T) { + SmallString<128> Str; + T.toVector(Str); + EmitRawText(Str.str()); +} |

