[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