[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