aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-04-03 22:12:35 +0000
committerChris Lattner <sabre@nondot.org>2010-04-03 22:12:35 +0000
commit58bc4dd4a91443ddd3120b0a2f1801ad4d6aae1c (patch)
tree700565cb493914bcd214dbe70ad1eb759736a813 /lib
parentd5928dcd78ec03a64f61b7a93be219d97eda1f5c (diff)
downloadexternal_llvm-58bc4dd4a91443ddd3120b0a2f1801ad4d6aae1c.zip
external_llvm-58bc4dd4a91443ddd3120b0a2f1801ad4d6aae1c.tar.gz
external_llvm-58bc4dd4a91443ddd3120b0a2f1801ad4d6aae1c.tar.bz2
add a twine form of MCStreamer::EmitRawText, and mc'ize
a few more things in AsmPrinter.cpp. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100294 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/CodeGen/AsmPrinter/AsmPrinter.cpp36
-rw-r--r--lib/MC/MCStreamer.cpp8
2 files changed, 28 insertions, 16 deletions
diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index 5e0d0dc..6791633 100644
--- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/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/lib/MC/MCStreamer.cpp b/lib/MC/MCStreamer.cpp
index 0b88b0f..4f484a2 100644
--- a/lib/MC/MCStreamer.cpp
+++ b/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());
+}