[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
Bill Wendling
isanbard at gmail.com
Wed Sep 24 22:22:58 PDT 2008
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
More information about the llvm-commits
mailing list