[llvm-commits] [llvm] r167904 - in /llvm/trunk: include/llvm/CodeGen/ include/llvm/Target/ lib/CodeGen/ lib/CodeGen/AsmPrinter/ lib/Target/ lib/Target/ARM/ lib/Target/X86/ test/CodeGen/ARM/

Chad Rosier mcrosier at apple.com
Wed Nov 14 11:03:31 PST 2012


Anton,
I think one of the comments needs updating.  See below.

On Nov 13, 2012, at 5:47 PM, Anton Korobeynikov <asl at math.spbu.ru> wrote:

> Author: asl
> Date: Tue Nov 13 19:47:00 2012
> New Revision: 167904
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=167904&view=rev
> Log:
> Use TARGET2 relocation for TType references on ARM.
> Do some cleanup of the code while here.
> 
> Inspired by patch by Logan Chien!
> 
> Added:
>    llvm/trunk/test/CodeGen/ARM/arm-ttype-target2.ll
> Modified:
>    llvm/trunk/include/llvm/CodeGen/AsmPrinter.h
>    llvm/trunk/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
>    llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h
>    llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
>    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfException.cpp
>    llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
>    llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.cpp
>    llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.h
>    llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp
>    llvm/trunk/lib/Target/X86/X86TargetObjectFile.cpp
>    llvm/trunk/lib/Target/X86/X86TargetObjectFile.h
> 
> Modified: llvm/trunk/include/llvm/CodeGen/AsmPrinter.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/AsmPrinter.h?rev=167904&r1=167903&r2=167904&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/AsmPrinter.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/AsmPrinter.h Tue Nov 13 19:47:00 2012
> @@ -385,10 +385,8 @@
>     /// GetSizeOfEncodedValue - Return the size of the encoding in bytes.
>     unsigned GetSizeOfEncodedValue(unsigned Encoding) const;
> 
> -    /// EmitReference - Emit a reference to a label with a specified encoding.
> -    ///
> -    void EmitReference(const MCSymbol *Sym, unsigned Encoding) const;
> -    void EmitReference(const GlobalValue *GV, unsigned Encoding) const;
> +    /// EmitReference - Emit reference to a ttype global with a specified encoding.
> +    void EmitTTypeReference(const GlobalValue *GV, unsigned Encoding) const;
> 
>     /// EmitSectionOffset - Emit the 4-byte offset of Label from the start of
>     /// its section.  This can be done with a special directive if the target
> 
> Modified: llvm/trunk/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h?rev=167904&r1=167903&r2=167904&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h Tue Nov 13 19:47:00 2012
> @@ -57,11 +57,10 @@
> 
>   /// getExprForDwarfGlobalReference - Return an MCExpr to use for a reference
>   /// to the specified global variable from exception handling information.

Should this comment be updated?

> -  ///
>   virtual const MCExpr *
> -  getExprForDwarfGlobalReference(const GlobalValue *GV, Mangler *Mang,
> -                                 MachineModuleInfo *MMI, unsigned Encoding,
> -                                 MCStreamer &Streamer) const;
> +  getTTypeGlobalReference(const GlobalValue *GV, Mangler *Mang,
> +                          MachineModuleInfo *MMI, unsigned Encoding,
> +                          MCStreamer &Streamer) const;
> 
>   // getCFIPersonalitySymbol - The symbol that gets passed to .cfi_personality.
>   virtual MCSymbol *
> @@ -103,12 +102,12 @@
>   virtual bool shouldEmitUsedDirectiveFor(const GlobalValue *GV,
>                                           Mangler *) const;
> 
> -  /// getExprForDwarfGlobalReference - The mach-o version of this method
> +  /// getTTypeGlobalReference - The mach-o version of this method
>   /// defaults to returning a stub reference.
>   virtual const MCExpr *
> -  getExprForDwarfGlobalReference(const GlobalValue *GV, Mangler *Mang,
> -                                 MachineModuleInfo *MMI, unsigned Encoding,
> -                                 MCStreamer &Streamer) const;
> +  getTTypeGlobalReference(const GlobalValue *GV, Mangler *Mang,
> +                          MachineModuleInfo *MMI, unsigned Encoding,
> +                          MCStreamer &Streamer) const;
> 
>   // getCFIPersonalitySymbol - The symbol that gets passed to .cfi_personality.
>   virtual MCSymbol *
> 
> Modified: llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h?rev=167904&r1=167903&r2=167904&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h (original)
> +++ llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h Tue Nov 13 19:47:00 2012
> @@ -27,6 +27,7 @@
>   class MCExpr;
>   class MCSection;
>   class MCSymbol;
> +  class MCSymbolRefExpr;
>   class MCStreamer;
>   class GlobalValue;
>   class TargetMachine;
> @@ -108,13 +109,13 @@
>     return 0;
>   }
> 
> -  /// getExprForDwarfGlobalReference - Return an MCExpr to use for a reference
> +  /// getTTypeGlobalReference - Return an MCExpr to use for a reference
>   /// to the specified global variable from exception handling information.
>   ///
>   virtual const MCExpr *
> -  getExprForDwarfGlobalReference(const GlobalValue *GV, Mangler *Mang,
> -                                 MachineModuleInfo *MMI, unsigned Encoding,
> -                                 MCStreamer &Streamer) const;
> +  getTTypeGlobalReference(const GlobalValue *GV, Mangler *Mang,
> +                          MachineModuleInfo *MMI, unsigned Encoding,
> +                          MCStreamer &Streamer) const;
> 
>   // getCFIPersonalitySymbol - The symbol that gets passed to .cfi_personality.
>   virtual MCSymbol *
> @@ -123,8 +124,8 @@
> 
>   /// 
>   const MCExpr *
> -  getExprForDwarfReference(const MCSymbol *Sym, unsigned Encoding,
> -                           MCStreamer &Streamer) const;
> +  getTTypeReference(const MCSymbolRefExpr *Sym, unsigned Encoding,
> +                    MCStreamer &Streamer) const;
> 
>   virtual const MCSection *
>   getStaticCtorSection(unsigned Priority = 65535) const {
> 
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp?rev=167904&r1=167903&r2=167904&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp Tue Nov 13 19:47:00 2012
> @@ -119,19 +119,11 @@
>   }
> }
> 
> -void AsmPrinter::EmitReference(const MCSymbol *Sym, unsigned Encoding) const {
> +void AsmPrinter::EmitTTypeReference(const GlobalValue *GV, unsigned Encoding)const{
>   const TargetLoweringObjectFile &TLOF = getObjFileLowering();
> 
>   const MCExpr *Exp =
> -    TLOF.getExprForDwarfReference(Sym, Encoding, OutStreamer);
> -  OutStreamer.EmitAbsValue(Exp, GetSizeOfEncodedValue(Encoding));
> -}
> -
> -void AsmPrinter::EmitReference(const GlobalValue *GV, unsigned Encoding)const{
> -  const TargetLoweringObjectFile &TLOF = getObjFileLowering();
> -  
> -  const MCExpr *Exp =
> -    TLOF.getExprForDwarfGlobalReference(GV, Mang, MMI, Encoding, OutStreamer);
> +    TLOF.getTTypeGlobalReference(GV, Mang, MMI, Encoding, OutStreamer);
>   OutStreamer.EmitValue(Exp, GetSizeOfEncodedValue(Encoding), /*addrspace*/0);
> }
> 
> 
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfException.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfException.cpp?rev=167904&r1=167903&r2=167904&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfException.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfException.cpp Tue Nov 13 19:47:00 2012
> @@ -685,7 +685,7 @@
>     if (VerboseAsm)
>       Asm->OutStreamer.AddComment("TypeInfo " + Twine(Entry--));
>     if (GV)
> -      Asm->EmitReference(GV, TTypeEncoding);
> +      Asm->EmitTTypeReference(GV, TTypeEncoding);
>     else
>       Asm->OutStreamer.EmitIntValue(0,Asm->GetSizeOfEncodedValue(TTypeEncoding),
>                                     0);
> 
> Modified: llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp?rev=167904&r1=167903&r2=167904&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp (original)
> +++ llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp Tue Nov 13 19:47:00 2012
> @@ -88,6 +88,36 @@
>   Streamer.EmitSymbolValue(Sym, Size);
> }
> 
> +const MCExpr *TargetLoweringObjectFileELF::
> +getTTypeGlobalReference(const GlobalValue *GV, Mangler *Mang,
> +                        MachineModuleInfo *MMI, unsigned Encoding,
> +                        MCStreamer &Streamer) const {
> +
> +  if (Encoding & dwarf::DW_EH_PE_indirect) {
> +    MachineModuleInfoELF &ELFMMI = MMI->getObjFileInfo<MachineModuleInfoELF>();
> +
> +    SmallString<128> Name;
> +    Mang->getNameWithPrefix(Name, GV, true);
> +    Name += ".DW.stub";
> +
> +    // Add information about the stub reference to ELFMMI so that the stub
> +    // gets emitted by the asmprinter.
> +    MCSymbol *SSym = getContext().GetOrCreateSymbol(Name.str());
> +    MachineModuleInfoImpl::StubValueTy &StubSym = ELFMMI.getGVStubEntry(SSym);
> +    if (StubSym.getPointer() == 0) {
> +      MCSymbol *Sym = Mang->getSymbol(GV);
> +      StubSym = MachineModuleInfoImpl::StubValueTy(Sym, !GV->hasLocalLinkage());
> +    }
> +
> +    return TargetLoweringObjectFile::
> +      getTTypeReference(MCSymbolRefExpr::Create(SSym, getContext()),
> +                        Encoding & ~dwarf::DW_EH_PE_indirect, Streamer);
> +  }
> +
> +  return TargetLoweringObjectFile::
> +    getTTypeGlobalReference(GV, Mang, MMI, Encoding, Streamer);
> +}
> +
> static SectionKind
> getELFKindForNamedSection(StringRef Name, SectionKind K) {
>   // N.B.: The defaults used in here are no the same ones used in MC.
> @@ -314,35 +344,6 @@
>   return DataRelROSection;
> }
> 
> -const MCExpr *TargetLoweringObjectFileELF::
> -getExprForDwarfGlobalReference(const GlobalValue *GV, Mangler *Mang,
> -                               MachineModuleInfo *MMI,
> -                               unsigned Encoding, MCStreamer &Streamer) const {
> -
> -  if (Encoding & dwarf::DW_EH_PE_indirect) {
> -    MachineModuleInfoELF &ELFMMI = MMI->getObjFileInfo<MachineModuleInfoELF>();
> -
> -    SmallString<128> Name;
> -    Mang->getNameWithPrefix(Name, GV, true);
> -    Name += ".DW.stub";
> -
> -    // Add information about the stub reference to ELFMMI so that the stub
> -    // gets emitted by the asmprinter.
> -    MCSymbol *SSym = getContext().GetOrCreateSymbol(Name.str());
> -    MachineModuleInfoImpl::StubValueTy &StubSym = ELFMMI.getGVStubEntry(SSym);
> -    if (StubSym.getPointer() == 0) {
> -      MCSymbol *Sym = Mang->getSymbol(GV);
> -      StubSym = MachineModuleInfoImpl::StubValueTy(Sym, !GV->hasLocalLinkage());
> -    }
> -
> -    return TargetLoweringObjectFile::
> -      getExprForDwarfReference(SSym, Encoding & ~dwarf::DW_EH_PE_indirect, Streamer);
> -  }
> -
> -  return TargetLoweringObjectFile::
> -    getExprForDwarfGlobalReference(GV, Mang, MMI, Encoding, Streamer);
> -}
> -
> const MCSection *
> TargetLoweringObjectFileELF::getStaticCtorSection(unsigned Priority) const {
>   // The default scheme is .ctor / .dtor, so we have to invert the priority
> @@ -604,9 +605,9 @@
> }
> 
> const MCExpr *TargetLoweringObjectFileMachO::
> -getExprForDwarfGlobalReference(const GlobalValue *GV, Mangler *Mang,
> -                               MachineModuleInfo *MMI, unsigned Encoding,
> -                               MCStreamer &Streamer) const {
> +getTTypeGlobalReference(const GlobalValue *GV, Mangler *Mang,
> +                        MachineModuleInfo *MMI, unsigned Encoding,
> +                        MCStreamer &Streamer) const {
>   // The mach-o version of this method defaults to returning a stub reference.
> 
>   if (Encoding & DW_EH_PE_indirect) {
> @@ -629,11 +630,12 @@
>     }
> 
>     return TargetLoweringObjectFile::
> -      getExprForDwarfReference(SSym, Encoding & ~dwarf::DW_EH_PE_indirect, Streamer);
> +      getTTypeReference(MCSymbolRefExpr::Create(SSym, getContext()),
> +                        Encoding & ~dwarf::DW_EH_PE_indirect, Streamer);
>   }
> 
>   return TargetLoweringObjectFile::
> -    getExprForDwarfGlobalReference(GV, Mang, MMI, Encoding, Streamer);
> +    getTTypeGlobalReference(GV, Mang, MMI, Encoding, Streamer);
> }
> 
> MCSymbol *TargetLoweringObjectFileMachO::
> 
> Modified: llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.cpp?rev=167904&r1=167903&r2=167904&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.cpp Tue Nov 13 19:47:00 2012
> @@ -10,10 +10,12 @@
> #include "ARMTargetObjectFile.h"
> #include "ARMSubtarget.h"
> #include "llvm/MC/MCContext.h"
> +#include "llvm/MC/MCExpr.h"
> #include "llvm/MC/MCSectionELF.h"
> +#include "llvm/Target/Mangler.h"
> +#include "llvm/Target/TargetMachine.h"
> #include "llvm/Support/Dwarf.h"
> #include "llvm/Support/ELF.h"
> -#include "llvm/Target/TargetMachine.h"
> #include "llvm/ADT/StringExtras.h"
> using namespace llvm;
> using namespace dwarf;
> @@ -38,3 +40,14 @@
>                                0,
>                                SectionKind::getMetadata());
> }
> +
> +const MCExpr *ARMElfTargetObjectFile::
> +getTTypeGlobalReference(const GlobalValue *GV, Mangler *Mang,
> +                        MachineModuleInfo *MMI, unsigned Encoding,
> +                        MCStreamer &Streamer) const {
> +  assert(Encoding == DW_EH_PE_absptr && "Can handle absptr encoding only");
> +
> +  return MCSymbolRefExpr::Create(Mang->getSymbol(GV),
> +                                 MCSymbolRefExpr::VK_ARM_TARGET2,
> +                                 getContext());
> +}
> 
> Modified: llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.h?rev=167904&r1=167903&r2=167904&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.h (original)
> +++ llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.h Tue Nov 13 19:47:00 2012
> @@ -28,6 +28,11 @@
> 
>   virtual void Initialize(MCContext &Ctx, const TargetMachine &TM);
> 
> +  const MCExpr *
> +  getTTypeGlobalReference(const GlobalValue *GV, Mangler *Mang,
> +                          MachineModuleInfo *MMI, unsigned Encoding,
> +                          MCStreamer &Streamer) const;
> +  
>   virtual const MCSection *getAttributesSection() const {
>     return AttributesSection;
>   }
> 
> Modified: llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp?rev=167904&r1=167903&r2=167904&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp (original)
> +++ llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp Tue Nov 13 19:47:00 2012
> @@ -285,35 +285,35 @@
>   return DataSection;
> }
> 
> -/// getExprForDwarfGlobalReference - Return an MCExpr to use for a
> +/// getTTypeGlobalReference - Return an MCExpr to use for a
> /// reference to the specified global variable from exception
> /// handling information.
> const MCExpr *TargetLoweringObjectFile::
> -getExprForDwarfGlobalReference(const GlobalValue *GV, Mangler *Mang,
> -                               MachineModuleInfo *MMI, unsigned Encoding,
> -                               MCStreamer &Streamer) const {
> -  const MCSymbol *Sym = Mang->getSymbol(GV);
> -  return getExprForDwarfReference(Sym, Encoding, Streamer);
> +getTTypeGlobalReference(const GlobalValue *GV, Mangler *Mang,
> +                        MachineModuleInfo *MMI, unsigned Encoding,
> +                        MCStreamer &Streamer) const {
> +  const MCSymbolRefExpr *Ref =
> +    MCSymbolRefExpr::Create(Mang->getSymbol(GV), getContext());
> +
> +  return getTTypeReference(Ref, Encoding, Streamer);
> }
> 
> const MCExpr *TargetLoweringObjectFile::
> -getExprForDwarfReference(const MCSymbol *Sym, unsigned Encoding,
> -                         MCStreamer &Streamer) const {
> -  const MCExpr *Res = MCSymbolRefExpr::Create(Sym, getContext());
> -
> +getTTypeReference(const MCSymbolRefExpr *Sym, unsigned Encoding,
> +                  MCStreamer &Streamer) const {
>   switch (Encoding & 0x70) {
>   default:
>     report_fatal_error("We do not support this DWARF encoding yet!");
>   case dwarf::DW_EH_PE_absptr:
>     // Do nothing special
> -    return Res;
> +    return Sym;
>   case dwarf::DW_EH_PE_pcrel: {
>     // Emit a label to the streamer for the current position.  This gives us
>     // .-foo addressing.
>     MCSymbol *PCSym = getContext().CreateTempSymbol();
>     Streamer.EmitLabel(PCSym);
>     const MCExpr *PC = MCSymbolRefExpr::Create(PCSym, getContext());
> -    return MCBinaryExpr::CreateSub(Res, PC, getContext());
> +    return MCBinaryExpr::CreateSub(Sym, PC, getContext());
>   }
>   }
> }
> 
> Modified: llvm/trunk/lib/Target/X86/X86TargetObjectFile.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetObjectFile.cpp?rev=167904&r1=167903&r2=167904&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86TargetObjectFile.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86TargetObjectFile.cpp Tue Nov 13 19:47:00 2012
> @@ -22,9 +22,9 @@
> using namespace dwarf;
> 
> const MCExpr *X86_64MachoTargetObjectFile::
> -getExprForDwarfGlobalReference(const GlobalValue *GV, Mangler *Mang,
> -                               MachineModuleInfo *MMI, unsigned Encoding,
> -                               MCStreamer &Streamer) const {
> +getTTypeGlobalReference(const GlobalValue *GV, Mangler *Mang,
> +                        MachineModuleInfo *MMI, unsigned Encoding,
> +                        MCStreamer &Streamer) const {
> 
>   // On Darwin/X86-64, we can reference dwarf symbols with foo at GOTPCREL+4, which
>   // is an indirect pc-relative reference.
> @@ -37,7 +37,7 @@
>   }
> 
>   return TargetLoweringObjectFileMachO::
> -    getExprForDwarfGlobalReference(GV, Mang, MMI, Encoding, Streamer);
> +    getTTypeGlobalReference(GV, Mang, MMI, Encoding, Streamer);
> }
> 
> MCSymbol *X86_64MachoTargetObjectFile::
> 
> Modified: llvm/trunk/lib/Target/X86/X86TargetObjectFile.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetObjectFile.h?rev=167904&r1=167903&r2=167904&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86TargetObjectFile.h (original)
> +++ llvm/trunk/lib/Target/X86/X86TargetObjectFile.h Tue Nov 13 19:47:00 2012
> @@ -21,9 +21,9 @@
>   class X86_64MachoTargetObjectFile : public TargetLoweringObjectFileMachO {
>   public:
>     virtual const MCExpr *
> -    getExprForDwarfGlobalReference(const GlobalValue *GV, Mangler *Mang,
> -                                   MachineModuleInfo *MMI, unsigned Encoding,
> -                                   MCStreamer &Streamer) const;
> +    getTTypeGlobalReference(const GlobalValue *GV, Mangler *Mang,
> +                            MachineModuleInfo *MMI, unsigned Encoding,
> +                            MCStreamer &Streamer) const;
> 
>     // getCFIPersonalitySymbol - The symbol that gets passed to
>     // .cfi_personality.
> 
> Added: llvm/trunk/test/CodeGen/ARM/arm-ttype-target2.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/arm-ttype-target2.ll?rev=167904&view=auto
> ==============================================================================
> --- llvm/trunk/test/CodeGen/ARM/arm-ttype-target2.ll (added)
> +++ llvm/trunk/test/CodeGen/ARM/arm-ttype-target2.ll Tue Nov 13 19:47:00 2012
> @@ -0,0 +1,44 @@
> +; RUN: llc -mtriple=armv7-none-linux-gnueabi -arm-enable-ehabi -arm-enable-ehabi-descriptors < %s | FileCheck %s 
> +
> + at _ZTVN10__cxxabiv117__class_type_infoE = external global i8*
> + at _ZTS3Foo = linkonce_odr constant [5 x i8] c"3Foo\00"
> + at _ZTI3Foo = linkonce_odr unnamed_addr constant { i8*, i8* } { i8* bitcast (i8** getelementptr inbounds (i8** @_ZTVN10__cxxabiv117__class_type_infoE, i32 2) to i8*), i8* getelementptr inbounds ([5 x i8]* @_ZTS3Foo, i32 0, i32 0) }
> +
> +define i32 @main() {
> +entry:
> +  invoke void @_Z3foov()
> +          to label %return unwind label %lpad
> +
> +lpad:                                             ; preds = %entry
> +  %0 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
> +          catch i8* bitcast ({ i8*, i8* }* @_ZTI3Foo to i8*)
> +  %1 = extractvalue { i8*, i32 } %0, 1
> +  %2 = tail call i32 @llvm.eh.typeid.for(i8* bitcast ({ i8*, i8* }* @_ZTI3Foo to i8*)) nounwind
> +; CHECK: _ZTI3Foo(target2)
> +
> +  %matches = icmp eq i32 %1, %2
> +  br i1 %matches, label %catch, label %eh.resume
> +
> +catch:                                            ; preds = %lpad
> +  %3 = extractvalue { i8*, i32 } %0, 0
> +  %4 = tail call i8* @__cxa_begin_catch(i8* %3) nounwind
> +  tail call void @__cxa_end_catch()
> +  br label %return
> +
> +return:                                           ; preds = %entry, %catch
> +  %retval.0 = phi i32 [ 1, %catch ], [ 0, %entry ]
> +  ret i32 %retval.0
> +
> +eh.resume:                                        ; preds = %lpad
> +  resume { i8*, i32 } %0
> +}
> +
> +declare void @_Z3foov()
> +
> +declare i32 @__gxx_personality_v0(...)
> +
> +declare i32 @llvm.eh.typeid.for(i8*) nounwind readnone
> +
> +declare i8* @__cxa_begin_catch(i8*)
> +
> +declare void @__cxa_end_catch()
> 
> 
> _______________________________________________
> 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