[llvm-commits] [llvm] r56585 - in /llvm/trunk: include/llvm/Target/TargetAsmInfo.h lib/Target/TargetAsmInfo.cpp lib/Target/X86/X86TargetAsmInfo.cpp lib/Target/X86/X86TargetAsmInfo.h lib/Target/X86/X86TargetMachine.cpp
Evan Cheng
evan.cheng at apple.com
Thu Sep 25 00:37:33 PDT 2008
I've backed 56585 - 56589 out for now. Anton, please fix.
Thanks,
Evan
On Sep 24, 2008, at 10:22 PM, Bill Wendling wrote:
> Anton,
>
> This patch is causing a build failure. Please investigate. I may have
> to revert all of your patches from 9/24.
>
> -bw
>
> llvm[2]: Linking Debug executable llc
> Undefined symbols:
>
> "llvm::ARMTargetAsmInfo<llvm::TargetAsmInfo>::getInlineAsmLength(char
> const*) const", referenced from:
> vtable for llvm::ARMTargetAsmInfo<llvm::TargetAsmInfo>in
> LLVMARMCodeGen.o
>
> "llvm
> ::X86TargetAsmInfo
> <llvm::TargetAsmInfo>::ExpandInlineAsm(llvm::CallInst*) const",
> referenced from:
> vtable for llvm::X86COFFTargetAsmInfoin LLVMX86CodeGen.o
> vtable for llvm::X86TargetAsmInfo<llvm::TargetAsmInfo>in
> LLVMX86CodeGen.o
> vtable for llvm::X86WinTargetAsmInfoin LLVMX86CodeGen.o
> ld: symbol(s) not found
> collect2: ld returned 1 exit status
> make[2]: *** [/Users/void/llvm/llvm.obj/Debug/bin/llc] Error 1
> make[1]: *** [llc/.makeall] Error 2
> make: *** [all] Error 1
>
> On Sep 24, 2008, at 3:21 PM, Anton Korobeynikov wrote:
>
>> Author: asl
>> Date: Wed Sep 24 17:21:39 2008
>> New Revision: 56585
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=56585&view=rev
>> Log:
>> Use crazy template-based inheritance instead of virtual one.
>>
>> Modified:
>> llvm/trunk/include/llvm/Target/TargetAsmInfo.h
>> llvm/trunk/lib/Target/TargetAsmInfo.cpp
>> llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp
>> llvm/trunk/lib/Target/X86/X86TargetAsmInfo.h
>> llvm/trunk/lib/Target/X86/X86TargetMachine.cpp
>>
>> Modified: llvm/trunk/include/llvm/Target/TargetAsmInfo.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetAsmInfo.h?rev=56585&r1=56584&r2=56585&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- llvm/trunk/include/llvm/Target/TargetAsmInfo.h (original)
>> +++ llvm/trunk/include/llvm/Target/TargetAsmInfo.h Wed Sep 24
>> 17:21:39 2008
>> @@ -124,6 +124,7 @@
>> private:
>> mutable StringMap<Section> Sections;
>> mutable SectionFlags::FlagsStringsMapType FlagsStrings;
>> + void fillDefaultValues();
>> protected:
>> //
>> ===------------------------------------------------------------------
>> ===//
>> // Properties to be set by the target writer, used to configure
>> asm printer.
>> @@ -510,6 +511,7 @@
>>
>> public:
>> TargetAsmInfo();
>> + TargetAsmInfo(const TargetMachine &TM);
>> virtual ~TargetAsmInfo();
>>
>> const Section* getNamedSection(const char *Name,
>>
>> Modified: llvm/trunk/lib/Target/TargetAsmInfo.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetAsmInfo.cpp?rev=56585&r1=56584&r2=56585&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- llvm/trunk/lib/Target/TargetAsmInfo.cpp (original)
>> +++ llvm/trunk/lib/Target/TargetAsmInfo.cpp Wed Sep 24 17:21:39 2008
>> @@ -25,100 +25,108 @@
>>
>> using namespace llvm;
>>
>> -TargetAsmInfo::TargetAsmInfo() :
>> - TextSection(0),
>> - DataSection(0),
>> - BSSSection("\t.bss"),
>> - BSSSection_(0),
>> - ReadOnlySection(0),
>> - SmallDataSection(0),
>> - SmallBSSSection(0),
>> - SmallRODataSection(0),
>> - TLSDataSection(0),
>> - TLSBSSSection(0),
>> - ZeroFillDirective(0),
>> - NonexecutableStackDirective(0),
>> - NeedsSet(false),
>> - MaxInstLength(4),
>> - PCSymbol("$"),
>> - SeparatorChar(';'),
>> - CommentString("#"),
>> - GlobalPrefix(""),
>> - PrivateGlobalPrefix("."),
>> - LessPrivateGlobalPrefix(""),
>> - JumpTableSpecialLabelPrefix(0),
>> - GlobalVarAddrPrefix(""),
>> - GlobalVarAddrSuffix(""),
>> - FunctionAddrPrefix(""),
>> - FunctionAddrSuffix(""),
>> - PersonalityPrefix(""),
>> - PersonalitySuffix(""),
>> - NeedsIndirectEncoding(false),
>> - InlineAsmStart("#APP"),
>> - InlineAsmEnd("#NO_APP"),
>> - AssemblerDialect(0),
>> - StringConstantPrefix(".str"),
>> - ZeroDirective("\t.zero\t"),
>> - ZeroDirectiveSuffix(0),
>> - AsciiDirective("\t.ascii\t"),
>> - AscizDirective("\t.asciz\t"),
>> - Data8bitsDirective("\t.byte\t"),
>> - Data16bitsDirective("\t.short\t"),
>> - Data32bitsDirective("\t.long\t"),
>> - Data64bitsDirective("\t.quad\t"),
>> - AlignDirective("\t.align\t"),
>> - AlignmentIsInBytes(true),
>> - TextAlignFillValue(0),
>> - SwitchToSectionDirective("\t.section\t"),
>> - TextSectionStartSuffix(""),
>> - DataSectionStartSuffix(""),
>> - SectionEndDirectiveSuffix(0),
>> - ConstantPoolSection("\t.section .rodata"),
>> - JumpTableDataSection("\t.section .rodata"),
>> - JumpTableDirective(0),
>> - CStringSection(0),
>> - CStringSection_(0),
>> - StaticCtorsSection("\t.section .ctors,\"aw\", at progbits"),
>> - StaticDtorsSection("\t.section .dtors,\"aw\", at progbits"),
>> - GlobalDirective("\t.globl\t"),
>> - SetDirective(0),
>> - LCOMMDirective(0),
>> - COMMDirective("\t.comm\t"),
>> - COMMDirectiveTakesAlignment(true),
>> - HasDotTypeDotSizeDirective(true),
>> - UsedDirective(0),
>> - WeakRefDirective(0),
>> - WeakDefDirective(0),
>> - HiddenDirective("\t.hidden\t"),
>> - ProtectedDirective("\t.protected\t"),
>> - AbsoluteDebugSectionOffsets(false),
>> - AbsoluteEHSectionOffsets(false),
>> - HasLEB128(false),
>> - HasDotLocAndDotFile(false),
>> - SupportsDebugInformation(false),
>> - SupportsExceptionHandling(false),
>> - DwarfRequiresFrameSection(true),
>> - GlobalEHDirective(0),
>> - SupportsWeakOmittedEHFrame(true),
>> - DwarfSectionOffsetDirective(0),
>> - DwarfAbbrevSection(".debug_abbrev"),
>> - DwarfInfoSection(".debug_info"),
>> - DwarfLineSection(".debug_line"),
>> - DwarfFrameSection(".debug_frame"),
>> - DwarfPubNamesSection(".debug_pubnames"),
>> - DwarfPubTypesSection(".debug_pubtypes"),
>> - DwarfStrSection(".debug_str"),
>> - DwarfLocSection(".debug_loc"),
>> - DwarfARangesSection(".debug_aranges"),
>> - DwarfRangesSection(".debug_ranges"),
>> - DwarfMacInfoSection(".debug_macinfo"),
>> - DwarfEHFrameSection(".eh_frame"),
>> - DwarfExceptionSection(".gcc_except_table"),
>> - AsmTransCBE(0) {
>> +void TargetAsmInfo::fillDefaultValues() {
>> + BSSSection = "\t.bss";
>> + BSSSection_ = 0;
>> + ReadOnlySection = 0;
>> + SmallDataSection = 0;
>> + SmallBSSSection = 0;
>> + SmallRODataSection = 0;
>> + TLSDataSection = 0;
>> + TLSBSSSection = 0;
>> + ZeroFillDirective = 0;
>> + NonexecutableStackDirective = 0;
>> + NeedsSet = false;
>> + MaxInstLength = 4;
>> + PCSymbol = "$";
>> + SeparatorChar = ';';
>> + CommentString = "#";
>> + GlobalPrefix = "";
>> + PrivateGlobalPrefix = ".";
>> + LessPrivateGlobalPrefix = "";
>> + JumpTableSpecialLabelPrefix = 0;
>> + GlobalVarAddrPrefix = "";
>> + GlobalVarAddrSuffix = "";
>> + FunctionAddrPrefix = "";
>> + FunctionAddrSuffix = "";
>> + PersonalityPrefix = "";
>> + PersonalitySuffix = "";
>> + NeedsIndirectEncoding = false;
>> + InlineAsmStart = "#APP";
>> + InlineAsmEnd = "#NO_APP";
>> + AssemblerDialect = 0;
>> + StringConstantPrefix = ".str";
>> + ZeroDirective = "\t.zero\t";
>> + ZeroDirectiveSuffix = 0;
>> + AsciiDirective = "\t.ascii\t";
>> + AscizDirective = "\t.asciz\t";
>> + Data8bitsDirective = "\t.byte\t";
>> + Data16bitsDirective = "\t.short\t";
>> + Data32bitsDirective = "\t.long\t";
>> + Data64bitsDirective = "\t.quad\t";
>> + AlignDirective = "\t.align\t";
>> + AlignmentIsInBytes = true;
>> + TextAlignFillValue = 0;
>> + SwitchToSectionDirective = "\t.section\t";
>> + TextSectionStartSuffix = "";
>> + DataSectionStartSuffix = "";
>> + SectionEndDirectiveSuffix = 0;
>> + ConstantPoolSection = "\t.section .rodata";
>> + JumpTableDataSection = "\t.section .rodata";
>> + JumpTableDirective = 0;
>> + CStringSection = 0;
>> + CStringSection_ = 0;
>> + // FIXME: Flags are ELFish - replace with normal section stuff.
>> + StaticCtorsSection = "\t.section .ctors,\"aw\", at progbits";
>> + StaticDtorsSection = "\t.section .dtors,\"aw\", at progbits";
>> + GlobalDirective = "\t.globl\t";
>> + SetDirective = 0;
>> + LCOMMDirective = 0;
>> + COMMDirective = "\t.comm\t";
>> + COMMDirectiveTakesAlignment = true;
>> + HasDotTypeDotSizeDirective = true;
>> + UsedDirective = 0;
>> + WeakRefDirective = 0;
>> + WeakDefDirective = 0;
>> + // FIXME: These are ELFish - move to ELFTAI.
>> + HiddenDirective = "\t.hidden\t";
>> + ProtectedDirective = "\t.protected\t";
>> + AbsoluteDebugSectionOffsets = false;
>> + AbsoluteEHSectionOffsets = false;
>> + HasLEB128 = false;
>> + HasDotLocAndDotFile = false;
>> + SupportsDebugInformation = false;
>> + SupportsExceptionHandling = false;
>> + DwarfRequiresFrameSection = true;
>> + GlobalEHDirective = 0;
>> + SupportsWeakOmittedEHFrame = true;
>> + DwarfSectionOffsetDirective = 0;
>> + DwarfAbbrevSection = ".debug_abbrev";
>> + DwarfInfoSection = ".debug_info";
>> + DwarfLineSection = ".debug_line";
>> + DwarfFrameSection = ".debug_frame";
>> + DwarfPubNamesSection = ".debug_pubnames";
>> + DwarfPubTypesSection = ".debug_pubtypes";
>> + DwarfStrSection = ".debug_str";
>> + DwarfLocSection = ".debug_loc";
>> + DwarfARangesSection = ".debug_aranges";
>> + DwarfRangesSection = ".debug_ranges";
>> + DwarfMacInfoSection = ".debug_macinfo";
>> + DwarfEHFrameSection = ".eh_frame";
>> + DwarfExceptionSection = ".gcc_except_table";
>> + AsmTransCBE = 0;
>> TextSection = getUnnamedSection("\t.text", SectionFlags::Code);
>> DataSection = getUnnamedSection("\t.data", SectionFlags::Writeable);
>> }
>>
>> +TargetAsmInfo::TargetAsmInfo() {
>> + fillDefaultValues();
>> +}
>> +
>> +TargetAsmInfo::TargetAsmInfo(const TargetMachine &TM) {
>> + fillDefaultValues();
>> +}
>> +
>> TargetAsmInfo::~TargetAsmInfo() {
>> }
>>
>>
>> Modified: llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp?rev=56585&r1=56584&r2=56585&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp (original)
>> +++ llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp Wed Sep 24
>> 17:21:39 2008
>> @@ -25,27 +25,20 @@
>> using namespace llvm;
>> using namespace llvm::dwarf;
>>
>> -static const char *const x86_asm_table[] = {
>> - "{si}", "S",
>> - "{di}", "D",
>> - "{ax}", "a",
>> - "{cx}", "c",
>> - "{memory}", "memory",
>> - "{flags}", "",
>> - "{dirflag}", "",
>> - "{fpsr}", "",
>> - "{cc}", "cc",
>> - 0,0};
>> -
>> -X86TargetAsmInfo::X86TargetAsmInfo(const X86TargetMachine &TM) {
>> - const X86Subtarget *Subtarget = &TM.getSubtarget<X86Subtarget>();
>> +const char *const llvm::x86_asm_table[] = {
>> + "{si}", "S",
>> + "{di}", "D",
>> + "{ax}", "a",
>> + "{cx}", "c",
>> + "{memory}", "memory",
>> + "{flags}", "",
>> + "{dirflag}", "",
>> + "{fpsr}", "",
>> + "{cc}", "cc",
>> + 0,0};
>>
>> - AsmTransCBE = x86_asm_table;
>> -
>> - AssemblerDialect = Subtarget->getAsmFlavor();
>> -}
>> -
>> -bool X86TargetAsmInfo::LowerToBSwap(CallInst *CI) const {
>> +template <class BaseTAI>
>> +bool X86TargetAsmInfo<BaseTAI>::LowerToBSwap(CallInst *CI) const {
>> // FIXME: this should verify that we are targetting a 486 or
>> better. If not,
>> // we will turn this bswap into something that will be lowered to
>> logical ops
>> // instead of emitting the bswap asm. For now, we don't support
>> 486 or lower
>> @@ -74,7 +67,8 @@
>> return true;
>> }
>>
>> -bool X86TargetAsmInfo::ExpandInlineAsm(CallInst *CI) const {
>> +template <class BaseTAI>
>> +bool X86TargetAsmInfo<BaseTAI>::ExpandInlineAsm(CallInst *CI)
>> const {
>> InlineAsm *IA = cast<InlineAsm>(CI->getCalledValue());
>> std::vector<InlineAsm::ConstraintInfo> Constraints = IA-
>>> ParseConstraints();
>>
>> @@ -125,7 +119,7 @@
>> }
>>
>> X86DarwinTargetAsmInfo::X86DarwinTargetAsmInfo(const
>> X86TargetMachine &TM):
>> - X86TargetAsmInfo(TM), DarwinTargetAsmInfo(TM) {
>> + X86TargetAsmInfo<DarwinTargetAsmInfo>(TM) {
>> const X86Subtarget* Subtarget = &DTM->getSubtarget<X86Subtarget>();
>> bool is64Bit = Subtarget->is64Bit();
>>
>> @@ -225,7 +219,7 @@
>> }
>>
>> X86ELFTargetAsmInfo::X86ELFTargetAsmInfo(const X86TargetMachine &TM):
>> - X86TargetAsmInfo(TM), ELFTargetAsmInfo(TM) {
>> + X86TargetAsmInfo<ELFTargetAsmInfo>(TM) {
>>
>> CStringSection = ".rodata.str";
>> PrivateGlobalPrefix = ".L";
>> @@ -302,7 +296,7 @@
>> }
>>
>> X86COFFTargetAsmInfo::X86COFFTargetAsmInfo(const X86TargetMachine
>> &TM):
>> - X86TargetAsmInfo(TM) {
>> + X86GenericTargetAsmInfo(TM) {
>> X86TM = &TM;
>>
>> GlobalPrefix = "_";
>> @@ -408,7 +402,7 @@
>> }
>>
>> X86WinTargetAsmInfo::X86WinTargetAsmInfo(const X86TargetMachine &TM):
>> - X86TargetAsmInfo(TM) {
>> + X86GenericTargetAsmInfo(TM) {
>> GlobalPrefix = "_";
>> CommentString = ";";
>>
>>
>> Modified: llvm/trunk/lib/Target/X86/X86TargetAsmInfo.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetAsmInfo.h?rev=56585&r1=56584&r2=56585&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- llvm/trunk/lib/Target/X86/X86TargetAsmInfo.h (original)
>> +++ llvm/trunk/lib/Target/X86/X86TargetAsmInfo.h Wed Sep 24 17:21:39
>> 2008
>> @@ -14,17 +14,24 @@
>> #ifndef X86TARGETASMINFO_H
>> #define X86TARGETASMINFO_H
>>
>> +#include "X86TargetMachine.h"
>> #include "llvm/Target/TargetAsmInfo.h"
>> #include "llvm/Target/ELFTargetAsmInfo.h"
>> #include "llvm/Target/DarwinTargetAsmInfo.h"
>>
>> namespace llvm {
>>
>> - // Forward declaration.
>> - class X86TargetMachine;
>> + extern const char *const x86_asm_table[];
>>
>> - struct X86TargetAsmInfo : public virtual TargetAsmInfo {
>> - explicit X86TargetAsmInfo(const X86TargetMachine &TM);
>> + template <class BaseTAI>
>> + struct X86TargetAsmInfo : public BaseTAI {
>> + explicit X86TargetAsmInfo(const X86TargetMachine &TM):
>> + BaseTAI(TM) {
>> + const X86Subtarget *Subtarget =
>> &TM.getSubtarget<X86Subtarget>();
>> +
>> + BaseTAI::AsmTransCBE = x86_asm_table;
>> + BaseTAI::AssemblerDialect = Subtarget->getAsmFlavor();
>> + }
>>
>> virtual bool ExpandInlineAsm(CallInst *CI) const;
>>
>> @@ -32,21 +39,21 @@
>> bool LowerToBSwap(CallInst *CI) const;
>> };
>>
>> - struct X86DarwinTargetAsmInfo : public X86TargetAsmInfo,
>> - public DarwinTargetAsmInfo {
>> + typedef X86TargetAsmInfo<TargetAsmInfo> X86GenericTargetAsmInfo;
>> +
>> + struct X86DarwinTargetAsmInfo : public
>> X86TargetAsmInfo<DarwinTargetAsmInfo> {
>> explicit X86DarwinTargetAsmInfo(const X86TargetMachine &TM);
>> virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target
>> Reason,
>> bool Global) const;
>> };
>>
>> - struct X86ELFTargetAsmInfo : public X86TargetAsmInfo,
>> - public ELFTargetAsmInfo {
>> + struct X86ELFTargetAsmInfo : public
>> X86TargetAsmInfo<ELFTargetAsmInfo> {
>> explicit X86ELFTargetAsmInfo(const X86TargetMachine &TM);
>> virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target
>> Reason,
>> bool Global) const;
>> };
>>
>> - struct X86COFFTargetAsmInfo : public X86TargetAsmInfo {
>> + struct X86COFFTargetAsmInfo : public X86GenericTargetAsmInfo {
>> explicit X86COFFTargetAsmInfo(const X86TargetMachine &TM);
>> virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target
>> Reason,
>> bool Global) const;
>> @@ -57,9 +64,11 @@
>> const X86TargetMachine *X86TM;
>> };
>>
>> - struct X86WinTargetAsmInfo : public X86TargetAsmInfo {
>> + struct X86WinTargetAsmInfo : public X86GenericTargetAsmInfo {
>> explicit X86WinTargetAsmInfo(const X86TargetMachine &TM);
>> };
>> +
>> } // namespace llvm
>>
>> #endif
>> +
>>
>> Modified: llvm/trunk/lib/Target/X86/X86TargetMachine.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetMachine.cpp?rev=56585&r1=56584&r2=56585&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- llvm/trunk/lib/Target/X86/X86TargetMachine.cpp (original)
>> +++ llvm/trunk/lib/Target/X86/X86TargetMachine.cpp Wed Sep 24
>> 17:21:39 2008
>> @@ -54,7 +54,7 @@
>> case X86Subtarget::isWindows:
>> return new X86WinTargetAsmInfo(*this);
>> default:
>> - return new X86TargetAsmInfo(*this);
>> + return new X86GenericTargetAsmInfo(*this);
>> }
>> }
>>
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list