summaryrefslogtreecommitdiff
path: root/lib/Target/XCore/AsmPrinter/XCoreAsmPrinter.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-01-16 00:21:18 +0000
committerChris Lattner <sabre@nondot.org>2010-01-16 00:21:18 +0000
commit12164414dd3daa6974985eeb2e89bfb93cf07641 (patch)
tree88a76adb030f44177916489e3cb718d29752481b /lib/Target/XCore/AsmPrinter/XCoreAsmPrinter.cpp
parent89a9c91247d19bed0d202675162ad45bf24699fe (diff)
downloadllvm-12164414dd3daa6974985eeb2e89bfb93cf07641.tar.gz
llvm-12164414dd3daa6974985eeb2e89bfb93cf07641.tar.bz2
llvm-12164414dd3daa6974985eeb2e89bfb93cf07641.tar.xz
MCize a bunch more stuff, eliminating a lot of uses of the mangler
and CurrentFnName. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93594 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/XCore/AsmPrinter/XCoreAsmPrinter.cpp')
-rw-r--r--lib/Target/XCore/AsmPrinter/XCoreAsmPrinter.cpp103
1 files changed, 61 insertions, 42 deletions
diff --git a/lib/Target/XCore/AsmPrinter/XCoreAsmPrinter.cpp b/lib/Target/XCore/AsmPrinter/XCoreAsmPrinter.cpp
index 2a561c633b..b8669edbd3 100644
--- a/lib/Target/XCore/AsmPrinter/XCoreAsmPrinter.cpp
+++ b/lib/Target/XCore/AsmPrinter/XCoreAsmPrinter.cpp
@@ -69,10 +69,9 @@ namespace {
bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
unsigned AsmVariant, const char *ExtraCode);
- void emitGlobalDirective(const std::string &name);
- void emitExternDirective(const std::string &name);
+ void emitGlobalDirective(const MCSymbol *Sym);
- void emitArrayBound(const std::string &name, const GlobalVariable *GV);
+ void emitArrayBound(const MCSymbol *Sym, const GlobalVariable *GV);
virtual void PrintGlobalVariable(const GlobalVariable *GV);
void emitFunctionStart(MachineFunction &MF);
@@ -95,35 +94,31 @@ namespace {
#include "XCoreGenAsmWriter.inc"
-void XCoreAsmPrinter::
-emitGlobalDirective(const std::string &name)
-{
- O << MAI->getGlobalDirective() << name;
+void XCoreAsmPrinter::emitGlobalDirective(const MCSymbol *Sym) {
+ O << MAI->getGlobalDirective();
+ Sym->print(O, MAI);
O << "\n";
}
-void XCoreAsmPrinter::
-emitExternDirective(const std::string &name)
-{
- O << "\t.extern\t" << name;
- O << '\n';
-}
-
-void XCoreAsmPrinter::
-emitArrayBound(const std::string &name, const GlobalVariable *GV)
-{
+void XCoreAsmPrinter::emitArrayBound(const MCSymbol *Sym,
+ const GlobalVariable *GV) {
assert(((GV->hasExternalLinkage() ||
GV->hasWeakLinkage()) ||
GV->hasLinkOnceLinkage()) && "Unexpected linkage");
if (const ArrayType *ATy = dyn_cast<ArrayType>(
- cast<PointerType>(GV->getType())->getElementType()))
- {
- O << MAI->getGlobalDirective() << name << ".globound" << "\n";
- O << MAI->getSetDirective() << name << ".globound" << ","
+ cast<PointerType>(GV->getType())->getElementType())) {
+ O << MAI->getGlobalDirective();
+ Sym->print(O, MAI);
+ O << ".globound" << "\n";
+ O << MAI->getSetDirective();
+ Sym->print(O, MAI);
+ O << ".globound" << ","
<< ATy->getNumElements() << "\n";
if (GV->hasWeakLinkage() || GV->hasLinkOnceLinkage()) {
// TODO Use COMDAT groups for LinkOnceLinkage
- O << MAI->getWeakDefDirective() << name << ".globound" << "\n";
+ O << MAI->getWeakDefDirective();
+ Sym->print(O, MAI);
+ O << ".globound" << "\n";
}
}
}
@@ -135,15 +130,19 @@ void XCoreAsmPrinter::PrintGlobalVariable(const GlobalVariable *GV) {
return;
const TargetData *TD = TM.getTargetData();
-
OutStreamer.SwitchSection(getObjFileLowering().SectionForGlobal(GV, Mang,TM));
+
- std::string name = Mang->getMangledName(GV);
+ MCSymbol *GVSym = GetGlobalValueSymbol(GV);
Constant *C = GV->getInitializer();
unsigned Align = (unsigned)TD->getPreferredTypeAlignmentShift(C->getType());
// Mark the start of the global
- O << "\t.cc_top " << name << ".data," << name << "\n";
+ O << "\t.cc_top ";
+ GVSym->print(O, MAI);
+ O << ".data,";
+ GVSym->print(O, MAI);
+ O << "\n";
switch (GV->getLinkage()) {
case GlobalValue::AppendingLinkage:
@@ -153,11 +152,13 @@ void XCoreAsmPrinter::PrintGlobalVariable(const GlobalVariable *GV) {
case GlobalValue::WeakAnyLinkage:
case GlobalValue::WeakODRLinkage:
case GlobalValue::ExternalLinkage:
- emitArrayBound(name, GV);
- emitGlobalDirective(name);
+ emitArrayBound(GVSym, GV);
+ emitGlobalDirective(GVSym);
// TODO Use COMDAT groups for LinkOnceLinkage
if (GV->hasWeakLinkage() || GV->hasLinkOnceLinkage()) {
- O << MAI->getWeakDefDirective() << name << "\n";
+ O << MAI->getWeakDefDirective();
+ GVSym->print(O, MAI);
+ O << "\n";
}
// FALL THROUGH
case GlobalValue::InternalLinkage:
@@ -181,10 +182,15 @@ void XCoreAsmPrinter::PrintGlobalVariable(const GlobalVariable *GV) {
Size *= MaxThreads;
}
if (MAI->hasDotTypeDotSizeDirective()) {
- O << "\t.type " << name << ",@object\n";
- O << "\t.size " << name << "," << Size << "\n";
+ O << "\t.type ";
+ GVSym->print(O, MAI);
+ O << ",@object\n";
+ O << "\t.size ";
+ GVSym->print(O, MAI);
+ O << "," << Size << "\n";
}
- O << name << ":\n";
+ GVSym->print(O, MAI);
+ O << ":\n";
EmitGlobalConstant(C);
if (GV->isThreadLocal()) {
@@ -199,7 +205,9 @@ void XCoreAsmPrinter::PrintGlobalVariable(const GlobalVariable *GV) {
}
// Mark the end of the global
- O << "\t.cc_bottom " << name << ".data\n";
+ O << "\t.cc_bottom ";
+ GVSym->print(O, MAI);
+ O << ".data\n";
}
/// Emit the directives on the start of functions
@@ -210,7 +218,11 @@ void XCoreAsmPrinter::emitFunctionStart(MachineFunction &MF) {
OutStreamer.SwitchSection(getObjFileLowering().SectionForGlobal(F, Mang, TM));
// Mark the start of the function
- O << "\t.cc_top " << CurrentFnName << ".function," << CurrentFnName << "\n";
+ O << "\t.cc_top ";
+ CurrentFnSym->print(O, MAI);
+ O << ".function,";
+ CurrentFnSym->print(O, MAI);
+ O << "\n";
switch (F->getLinkage()) {
default: llvm_unreachable("Unknown linkage type!");
@@ -219,31 +231,38 @@ void XCoreAsmPrinter::emitFunctionStart(MachineFunction &MF) {
case Function::LinkerPrivateLinkage:
break;
case Function::ExternalLinkage:
- emitGlobalDirective(CurrentFnName);
+ emitGlobalDirective(CurrentFnSym);
break;
case Function::LinkOnceAnyLinkage:
case Function::LinkOnceODRLinkage:
case Function::WeakAnyLinkage:
case Function::WeakODRLinkage:
// TODO Use COMDAT groups for LinkOnceLinkage
- O << MAI->getGlobalDirective() << CurrentFnName << "\n";
- O << MAI->getWeakDefDirective() << CurrentFnName << "\n";
+ O << MAI->getGlobalDirective();
+ CurrentFnSym->print(O, MAI);
+ O << "\n";
+ O << MAI->getWeakDefDirective();
+ CurrentFnSym->print(O, MAI);
+ O << "\n";
break;
}
// (1 << 1) byte aligned
EmitAlignment(MF.getAlignment(), F, 1);
if (MAI->hasDotTypeDotSizeDirective()) {
- O << "\t.type " << CurrentFnName << ",@function\n";
+ O << "\t.type ";
+ CurrentFnSym->print(O, MAI);
+ O << ",@function\n";
}
- O << CurrentFnName << ":\n";
+ CurrentFnSym->print(O, MAI);
+ O << ":\n";
}
/// Emit the directives on the end of functions
-void XCoreAsmPrinter::
-emitFunctionEnd(MachineFunction &MF)
-{
+void XCoreAsmPrinter::emitFunctionEnd(MachineFunction &MF) {
// Mark the end of the function
- O << "\t.cc_bottom " << CurrentFnName << ".function\n";
+ O << "\t.cc_bottom ";
+ CurrentFnSym->print(O, MAI);
+ O << ".function\n";
}
/// runOnMachineFunction - This uses the printMachineInstruction()