1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 11:42:57 +01:00

factor this code better.

llvm-svn: 93859
This commit is contained in:
Chris Lattner 2010-01-19 05:51:42 +00:00
parent 377bd87849
commit ebe63b403e

View File

@ -161,41 +161,33 @@ void AsmPrinter::EmitGlobalVariable(const GlobalVariable *GV) {
unsigned Size = TD->getTypeAllocSize(GV->getType()->getElementType());
unsigned AlignLog = TD->getPreferredAlignmentLog(GV);
// Handle normal common symbols.
if (GVKind.isCommon()) {
// Handle common and BSS local symbols (.lcomm).
if (GVKind.isCommon() || GVKind.isBSSLocal()) {
if (Size == 0) Size = 1; // .comm Foo, 0 is undefined, avoid it.
O << MAI->getCOMMDirective() << *GVSym << ',' << Size;
if (MAI->getCOMMDirectiveTakesAlignment())
O << ',' << (MAI->getAlignmentIsInBytes() ? (1 << AlignLog) : AlignLog);
if (VerboseAsm) {
O << "\t\t" << MAI->getCommentString() << " '";
WriteAsOperand(O, GV, /*PrintType=*/false, GV->getParent());
O << '\'';
}
O << '\n';
return;
}
if (GVKind.isBSSLocal()) {
if (Size == 0) Size = 1; // .comm Foo, 0 is undefined, avoid it.
if (const char *LComm = MAI->getLCOMMDirective()) {
O << LComm << *GVSym << ',' << Size;
if (MAI->getLCOMMDirectiveTakesAlignment())
O << ',' << AlignLog;
} else {
O << "\t.local\t" << *GVSym << '\n';
O << MAI->getCOMMDirective() << *GVSym << ',' << Size;
if (MAI->getCOMMDirectiveTakesAlignment())
O << ',' << (MAI->getAlignmentIsInBytes() ? (1 << AlignLog) : AlignLog);
}
if (VerboseAsm) {
O.PadToColumn(MAI->getCommentColumn());
O << MAI->getCommentString() << ' ';
WriteAsOperand(O, GV, /*PrintType=*/false, GV->getParent());
}
if (GVKind.isCommon()) {
// .comm _foo, 42, 4
O << MAI->getCOMMDirective() << *GVSym << ',' << Size;
if (MAI->getCOMMDirectiveTakesAlignment())
O << ',' << (MAI->getAlignmentIsInBytes() ? (1 << AlignLog) : AlignLog);
} else if (const char *LComm = MAI->getLCOMMDirective()) {
// .lcomm _foo, 42, 4
O << LComm << *GVSym << ',' << Size;
if (MAI->getLCOMMDirectiveTakesAlignment())
O << ',' << AlignLog;
} else {
// .local _foo
O << "\t.local\t" << *GVSym << '\n';
// .comm _foo, 42, 4
O << MAI->getCOMMDirective() << *GVSym << ',' << Size;
if (MAI->getCOMMDirectiveTakesAlignment())
O << ',' << (MAI->getAlignmentIsInBytes() ? (1 << AlignLog) : AlignLog);
}
O << '\n';
return;
}