From: Chris Lattner Date: Tue, 11 Aug 2009 22:06:07 +0000 (+0000) Subject: move LCOMMDirective = "\t.lcomm\t" up to DarwinTAI, eliminate X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c89ecc5c2f6c089db328e2856aadf9fd4a1a0bd3;p=oota-llvm.git move LCOMMDirective = "\t.lcomm\t" up to DarwinTAI, eliminate template in PPC backend for TAI. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78727 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/ARM/ARMTargetAsmInfo.cpp b/lib/Target/ARM/ARMTargetAsmInfo.cpp index 653219bf744..755ee15a8d0 100644 --- a/lib/Target/ARM/ARMTargetAsmInfo.cpp +++ b/lib/Target/ARM/ARMTargetAsmInfo.cpp @@ -62,6 +62,8 @@ ARMELFTargetAsmInfo::ARMELFTargetAsmInfo() { PrivateGlobalPrefix = ".L"; WeakRefDirective = "\t.weak\t"; SetDirective = "\t.set\t"; + LCOMMDirective = "\t.lcomm\t"; + DwarfRequiresFrameSection = false; SupportsDebugInformation = true; diff --git a/lib/Target/ARM/ARMTargetAsmInfo.h b/lib/Target/ARM/ARMTargetAsmInfo.h index 9b97cbdc17a..d897d8cc0fe 100644 --- a/lib/Target/ARM/ARMTargetAsmInfo.h +++ b/lib/Target/ARM/ARMTargetAsmInfo.h @@ -32,7 +32,6 @@ namespace llvm { BaseTAI::COMMDirectiveTakesAlignment = false; BaseTAI::InlineAsmStart = "@ InlineAsm Start"; BaseTAI::InlineAsmEnd = "@ InlineAsm End"; - BaseTAI::LCOMMDirective = "\t.lcomm\t"; } }; diff --git a/lib/Target/DarwinTargetAsmInfo.cpp b/lib/Target/DarwinTargetAsmInfo.cpp index ad669f8c035..808074f4106 100644 --- a/lib/Target/DarwinTargetAsmInfo.cpp +++ b/lib/Target/DarwinTargetAsmInfo.cpp @@ -35,7 +35,8 @@ DarwinTargetAsmInfo::DarwinTargetAsmInfo() { WeakDefDirective = "\t.weak_definition "; WeakRefDirective = "\t.weak_reference "; HiddenDirective = "\t.private_extern "; - + LCOMMDirective = "\t.lcomm\t"; + // _foo.eh symbols are currently always exported so that the linker knows // about them. This is not necessary on 10.6 and later, but it // doesn't hurt anything. diff --git a/lib/Target/PowerPC/PPCTargetAsmInfo.cpp b/lib/Target/PowerPC/PPCTargetAsmInfo.cpp index 52e29865fa5..41d78dcb017 100644 --- a/lib/Target/PowerPC/PPCTargetAsmInfo.cpp +++ b/lib/Target/PowerPC/PPCTargetAsmInfo.cpp @@ -19,8 +19,7 @@ using namespace llvm; using namespace llvm::dwarf; -PPCDarwinTargetAsmInfo::PPCDarwinTargetAsmInfo(const PPCTargetMachine &TM) : - PPCTargetAsmInfo(TM) { +PPCDarwinTargetAsmInfo::PPCDarwinTargetAsmInfo(const PPCTargetMachine &TM) { PCSymbol = "."; CommentString = ";"; UsedDirective = "\t.no_dead_strip\t"; @@ -28,10 +27,21 @@ PPCDarwinTargetAsmInfo::PPCDarwinTargetAsmInfo(const PPCTargetMachine &TM) : GlobalEHDirective = "\t.globl\t"; SupportsWeakOmittedEHFrame = false; + + const PPCSubtarget *Subtarget = &TM.getSubtarget(); + bool isPPC64 = Subtarget->isPPC64(); + + ZeroDirective = "\t.space\t"; + SetDirective = "\t.set"; + Data64bitsDirective = isPPC64 ? "\t.quad\t" : 0; + AlignmentIsInBytes = false; + LCOMMDirective = "\t.lcomm\t"; + InlineAsmStart = "# InlineAsm Start"; + InlineAsmEnd = "# InlineAsm End"; + AssemblerDialect = Subtarget->getAsmFlavor(); } -PPCLinuxTargetAsmInfo::PPCLinuxTargetAsmInfo(const PPCTargetMachine &TM) : - PPCTargetAsmInfo(TM) { +PPCLinuxTargetAsmInfo::PPCLinuxTargetAsmInfo(const PPCTargetMachine &TM) { CommentString = "#"; GlobalPrefix = ""; PrivateGlobalPrefix = ".L"; @@ -47,12 +57,21 @@ PPCLinuxTargetAsmInfo::PPCLinuxTargetAsmInfo(const PPCTargetMachine &TM) : // Set up DWARF directives HasLEB128 = true; // Target asm supports leb128 directives (little-endian) + const PPCSubtarget *Subtarget = &TM.getSubtarget(); + bool isPPC64 = Subtarget->isPPC64(); + // Exceptions handling - if (!TM.getSubtargetImpl()->isPPC64()) + if (!isPPC64) ExceptionsType = ExceptionHandling::Dwarf; AbsoluteEHSectionOffsets = false; + + ZeroDirective = "\t.space\t"; + SetDirective = "\t.set"; + Data64bitsDirective = isPPC64 ? "\t.quad\t" : 0; + AlignmentIsInBytes = false; + LCOMMDirective = "\t.lcomm\t"; + InlineAsmStart = "# InlineAsm Start"; + InlineAsmEnd = "# InlineAsm End"; + AssemblerDialect = Subtarget->getAsmFlavor(); } - -// Instantiate default implementation. -TEMPLATE_INSTANTIATION(class PPCTargetAsmInfo); diff --git a/lib/Target/PowerPC/PPCTargetAsmInfo.h b/lib/Target/PowerPC/PPCTargetAsmInfo.h index a84db460d28..0d9285a80fb 100644 --- a/lib/Target/PowerPC/PPCTargetAsmInfo.h +++ b/lib/Target/PowerPC/PPCTargetAsmInfo.h @@ -21,32 +21,11 @@ namespace llvm { - template - struct PPCTargetAsmInfo : public BaseTAI { - explicit PPCTargetAsmInfo(const PPCTargetMachine &TM) { - const PPCSubtarget *Subtarget = &TM.getSubtarget(); - bool isPPC64 = Subtarget->isPPC64(); - - BaseTAI::ZeroDirective = "\t.space\t"; - BaseTAI::SetDirective = "\t.set"; - BaseTAI::Data64bitsDirective = isPPC64 ? "\t.quad\t" : 0; - BaseTAI::AlignmentIsInBytes = false; - BaseTAI::LCOMMDirective = "\t.lcomm\t"; - BaseTAI::InlineAsmStart = "# InlineAsm Start"; - BaseTAI::InlineAsmEnd = "# InlineAsm End"; - BaseTAI::AssemblerDialect = Subtarget->getAsmFlavor(); - } - }; - - typedef PPCTargetAsmInfo PPCGenericTargetAsmInfo; - - EXTERN_TEMPLATE_INSTANTIATION(class PPCTargetAsmInfo); - - struct PPCDarwinTargetAsmInfo : public PPCTargetAsmInfo { + struct PPCDarwinTargetAsmInfo : public DarwinTargetAsmInfo { explicit PPCDarwinTargetAsmInfo(const PPCTargetMachine &TM); }; - struct PPCLinuxTargetAsmInfo : public PPCTargetAsmInfo { + struct PPCLinuxTargetAsmInfo : public TargetAsmInfo { explicit PPCLinuxTargetAsmInfo(const PPCTargetMachine &TM); }; diff --git a/lib/Target/X86/X86TargetAsmInfo.cpp b/lib/Target/X86/X86TargetAsmInfo.cpp index 7712b022501..c44703835c8 100644 --- a/lib/Target/X86/X86TargetAsmInfo.cpp +++ b/lib/Target/X86/X86TargetAsmInfo.cpp @@ -48,12 +48,10 @@ X86DarwinTargetAsmInfo::X86DarwinTargetAsmInfo(const X86TargetMachine &TM) { AlignmentIsInBytes = false; TextAlignFillValue = 0x90; - if (!is64Bit) Data64bitsDirective = 0; // we can't emit a 64-bit unit ZeroDirective = "\t.space\t"; // ".space N" emits N zeros. ZeroFillDirective = "\t.zerofill\t"; // Uses .zerofill - LCOMMDirective = "\t.lcomm\t"; // Leopard and above support aligned common symbols. COMMDirectiveTakesAlignment = (Subtarget->getDarwinVers() >= 9);