[llvm] r199871 - Add a variable to track whether or not we've used a unique section,

David Blaikie dblaikie at gmail.com
Fri Jan 24 09:32:15 PST 2014


On Wed, Jan 22, 2014 at 10:47 PM, Eric Christopher <echristo at gmail.com>wrote:

> Author: echristo
> Date: Thu Jan 23 00:47:25 2014
> New Revision: 199871
>
> URL: http://llvm.org/viewvc/llvm-project?rev=199871&view=rev
> Log:
> Add a variable to track whether or not we've used a unique section,
> e.g. linkonce, to TargetMachine and set it when we've done so
> for ELF targets currently. This involved making TargetMachine
> non-const in a TLOF use and propagating that change around - I'm
> open to other ideas.
>
> This will be used in a future commit to handle emitting debug
> information with ranges.
>

When we chatted about this I hadn't realized it would be quite this
intrusive (not that removing const itself is all that intrusive - but can
make the code harder to reason about later - and how common is it for
TargetMachine to be mutated? How exceptional/noteworthy is this change?)

And thinking about it further, I think the other way of doing this
(reactive inside DwarfDebug, rather than declarative) might not be so
painful... allow me to ramble:

So the alternative way I was describing/we were discussing was to have
DwarfDebug (or some other part of the debug handling machinery) record each
range, as it does - and the section the range belongs to (which it doesn't
already) then at the end, if all the ranges belonged to the same section,
just emit high_pc/low_pc. But doing that extra scan and keeping the extra
sections seems excessive (but not too much so compared to how much code
this change had to touch, to be honest) - but then I realized it's simpler
than that: all we have to do is record one section and whenever we go to
emit another function we test whether it's going in the same section as the
golden section we have recorded. If at any point it's not, we raise the
flag (null out the pointer might even be a sufficient flag raising - so we
wouldn't need another flag). Then we know that more than one section was
used and we emit ranges instead of high_pc/low_pc.

Yes/no/maybe/doesn't-make-any-sense?


>
> Modified:
>     llvm/trunk/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
>     llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h
>     llvm/trunk/include/llvm/Target/TargetMachine.h
>     llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
>     llvm/trunk/lib/Target/Hexagon/HexagonTargetObjectFile.cpp
>     llvm/trunk/lib/Target/Hexagon/HexagonTargetObjectFile.h
>     llvm/trunk/lib/Target/Mips/MipsTargetObjectFile.cpp
>     llvm/trunk/lib/Target/Mips/MipsTargetObjectFile.h
>     llvm/trunk/lib/Target/PowerPC/PPCTargetObjectFile.cpp
>     llvm/trunk/lib/Target/PowerPC/PPCTargetObjectFile.h
>     llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp
>     llvm/trunk/lib/Target/TargetMachine.cpp
>     llvm/trunk/lib/Target/XCore/XCoreTargetObjectFile.cpp
>     llvm/trunk/lib/Target/XCore/XCoreTargetObjectFile.h
>
> Modified: llvm/trunk/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h?rev=199871&r1=199870&r2=199871&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
> (original)
> +++ llvm/trunk/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h Thu Jan
> 23 00:47:25 2014
> @@ -53,7 +53,7 @@ public:
>
>    virtual const MCSection *
>    SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
> -                         Mangler *Mang, const TargetMachine &TM) const;
> +                         Mangler *Mang, TargetMachine &TM) const;
>
>    /// getTTypeGlobalReference - Return an MCExpr to use for a reference
> to the
>    /// specified type info global variable from exception handling
> information.
> @@ -92,7 +92,7 @@ public:
>
>    virtual const MCSection *
>    SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
> -                         Mangler *Mang, const TargetMachine &TM) const;
> +                         Mangler *Mang, TargetMachine &TM) const;
>
>    virtual const MCSection *
>    getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
> @@ -131,7 +131,7 @@ public:
>
>    virtual const MCSection *
>    SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
> -                         Mangler *Mang, const TargetMachine &TM) const;
> +                         Mangler *Mang, TargetMachine &TM) const;
>
>    /// getDepLibFromLinkerOpt - Extract the dependent library name from a
> linker
>    /// option string. Returns StringRef() if the option does not specify a
> library.
>
> Modified: llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h?rev=199871&r1=199870&r2=199871&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h (original)
> +++ llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h Thu Jan 23
> 00:47:25 2014
> @@ -38,7 +38,7 @@ class TargetLoweringObjectFile : public
>    const DataLayout *DL;
>
>    TargetLoweringObjectFile(
> -    const TargetLoweringObjectFile&) LLVM_DELETED_FUNCTION;
> +      const TargetLoweringObjectFile &) LLVM_DELETED_FUNCTION;
>    void operator=(const TargetLoweringObjectFile&) LLVM_DELETED_FUNCTION;
>
>  public:
> @@ -91,14 +91,14 @@ public:
>    /// be passed external (or available externally) globals.
>    const MCSection *SectionForGlobal(const GlobalValue *GV,
>                                      SectionKind Kind, Mangler *Mang,
> -                                    const TargetMachine &TM) const;
> +                                    TargetMachine &TM) const;
>
>    /// SectionForGlobal - This method computes the appropriate section to
> emit
>    /// the specified global variable or function definition.  This should
> not
>    /// be passed external (or available externally) globals.
>    const MCSection *SectionForGlobal(const GlobalValue *GV,
>                                      Mangler *Mang,
> -                                    const TargetMachine &TM) const {
> +                                    TargetMachine &TM) const {
>      return SectionForGlobal(GV, getKindForGlobal(GV, TM), Mang, TM);
>    }
>
> @@ -167,7 +167,7 @@ public:
>  protected:
>    virtual const MCSection *
>    SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
> -                         Mangler *Mang, const TargetMachine &TM) const;
> +                         Mangler *Mang, TargetMachine &TM) const;
>  };
>
>  } // end namespace llvm
>
> Modified: llvm/trunk/include/llvm/Target/TargetMachine.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetMachine.h?rev=199871&r1=199870&r2=199871&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Target/TargetMachine.h (original)
> +++ llvm/trunk/include/llvm/Target/TargetMachine.h Thu Jan 23 00:47:25 2014
> @@ -88,6 +88,7 @@ protected: // Can only create subclasses
>    unsigned MCUseLoc : 1;
>    unsigned MCUseCFI : 1;
>    unsigned MCUseDwarfDirectory : 1;
> +  unsigned DebugUseUniqueSections : 1;
>    unsigned RequireStructuredCFG : 1;
>
>  public:
> @@ -160,6 +161,9 @@ public:
>    bool requiresStructuredCFG() const { return RequireStructuredCFG; }
>    void setRequiresStructuredCFG(bool Value) { RequireStructuredCFG =
> Value; }
>
> +  bool debugUseUniqueSections() const { return DebugUseUniqueSections; }
> +  void setDebugUseUniqueSections(bool Value) { DebugUseUniqueSections =
> Value; }
> +
>    /// hasMCRelaxAll - Check whether all machine code instructions should
> be
>    /// relaxed.
>    bool hasMCRelaxAll() const { return MCRelaxAll; }
>
> Modified: llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp?rev=199871&r1=199870&r2=199871&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp (original)
> +++ llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp Thu Jan 23
> 00:47:25 2014
> @@ -232,7 +232,7 @@ static const char *getSectionPrefixForGl
>
>  const MCSection *TargetLoweringObjectFileELF::
>  SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
> -                       Mangler *Mang, const TargetMachine &TM) const {
> +                       Mangler *Mang, TargetMachine &TM) const {
>    // If we have -ffunction-section or -fdata-section then we should emit
> the
>    // global value to a uniqued section specifically for it.
>    bool EmitUniquedSection;
> @@ -258,6 +258,8 @@ SelectSectionForGlobal(const GlobalValue
>        Flags |= ELF::SHF_GROUP;
>      }
>
> +    // Set that we've used a unique section name in the target machine.
> +    TM.setDebugUseUniqueSections(true);
>      return getContext().getELFSection(Name.str(),
>                                        getELFSectionType(Name.str(), Kind),
>                                        Flags, Kind, 0, Group);
> @@ -529,7 +531,7 @@ getExplicitSectionGlobal(const GlobalVal
>
>  const MCSection *TargetLoweringObjectFileMachO::
>  SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
> -                       Mangler *Mang, const TargetMachine &TM) const {
> +                       Mangler *Mang, TargetMachine &TM) const {
>
>    // Handle thread local data.
>    if (Kind.isThreadBSS()) return TLSBSSSection;
> @@ -754,7 +756,7 @@ static const char *getCOFFSectionNameFor
>
>  const MCSection *TargetLoweringObjectFileCOFF::
>  SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
> -                       Mangler *Mang, const TargetMachine &TM) const {
> +                       Mangler *Mang, TargetMachine &TM) const {
>
>    // If this global is linkonce/weak and the target handles this by
> emitting it
>    // into a 'uniqued' section name, create and return the section now.
>
> Modified: llvm/trunk/lib/Target/Hexagon/HexagonTargetObjectFile.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonTargetObjectFile.cpp?rev=199871&r1=199870&r2=199871&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Hexagon/HexagonTargetObjectFile.cpp (original)
> +++ llvm/trunk/lib/Target/Hexagon/HexagonTargetObjectFile.cpp Thu Jan 23
> 00:47:25 2014
> @@ -87,7 +87,7 @@ IsGlobalInSmallSection(const GlobalValue
>
>  const MCSection *HexagonTargetObjectFile::
>  SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
> -                       Mangler *Mang, const TargetMachine &TM) const {
> +                       Mangler *Mang, TargetMachine &TM) const {
>
>    // Handle Small Section classification here.
>    if (Kind.isBSS() && IsGlobalInSmallSection(GV, TM, Kind))
>
> Modified: llvm/trunk/lib/Target/Hexagon/HexagonTargetObjectFile.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonTargetObjectFile.h?rev=199871&r1=199870&r2=199871&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Hexagon/HexagonTargetObjectFile.h (original)
> +++ llvm/trunk/lib/Target/Hexagon/HexagonTargetObjectFile.h Thu Jan 23
> 00:47:25 2014
> @@ -30,10 +30,9 @@ namespace llvm {
>                                  const TargetMachine &TM) const;
>
>      bool IsSmallDataEnabled () const;
> -    const MCSection* SelectSectionForGlobal(const GlobalValue *GV,
> -                                            SectionKind Kind,
> -                                            Mangler *Mang,
> -                                            const TargetMachine &TM)
> const;
> +    const MCSection *SelectSectionForGlobal(const GlobalValue *GV,
> +                                            SectionKind Kind, Mangler
> *Mang,
> +                                            TargetMachine &TM) const;
>    };
>
>  } // namespace llvm
>
> Modified: llvm/trunk/lib/Target/Mips/MipsTargetObjectFile.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsTargetObjectFile.cpp?rev=199871&r1=199870&r2=199871&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/MipsTargetObjectFile.cpp (original)
> +++ llvm/trunk/lib/Target/Mips/MipsTargetObjectFile.cpp Thu Jan 23
> 00:47:25 2014
> @@ -103,7 +103,7 @@ IsGlobalInSmallSection(const GlobalValue
>
>  const MCSection *MipsTargetObjectFile::
>  SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
> -                       Mangler *Mang, const TargetMachine &TM) const {
> +                       Mangler *Mang, TargetMachine &TM) const {
>    // TODO: Could also support "weak" symbols as well with
> ".gnu.linkonce.s.*"
>    // sections?
>
>
> Modified: llvm/trunk/lib/Target/Mips/MipsTargetObjectFile.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsTargetObjectFile.h?rev=199871&r1=199870&r2=199871&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/MipsTargetObjectFile.h (original)
> +++ llvm/trunk/lib/Target/Mips/MipsTargetObjectFile.h Thu Jan 23 00:47:25
> 2014
> @@ -31,9 +31,8 @@ namespace llvm {
>                                  const TargetMachine &TM) const;
>
>      const MCSection *SelectSectionForGlobal(const GlobalValue *GV,
> -                                            SectionKind Kind,
> -                                            Mangler *Mang,
> -                                            const TargetMachine &TM)
> const;
> +                                            SectionKind Kind, Mangler
> *Mang,
> +                                            TargetMachine &TM) const;
>
>      // TODO: Classify globals as mips wishes.
>      const MCSection *getReginfoSection() const { return ReginfoSection; }
>
> Modified: llvm/trunk/lib/Target/PowerPC/PPCTargetObjectFile.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCTargetObjectFile.cpp?rev=199871&r1=199870&r2=199871&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/PowerPC/PPCTargetObjectFile.cpp (original)
> +++ llvm/trunk/lib/Target/PowerPC/PPCTargetObjectFile.cpp Thu Jan 23
> 00:47:25 2014
> @@ -24,7 +24,7 @@ Initialize(MCContext &Ctx, const TargetM
>
>  const MCSection * PPC64LinuxTargetObjectFile::
>  SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
> -                       Mangler *Mang, const TargetMachine &TM) const {
> +                       Mangler *Mang, TargetMachine &TM) const {
>
>    const MCSection *DefaultSection =
>      TargetLoweringObjectFileELF::SelectSectionForGlobal(GV, Kind, Mang,
> TM);
>
> Modified: llvm/trunk/lib/Target/PowerPC/PPCTargetObjectFile.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCTargetObjectFile.h?rev=199871&r1=199870&r2=199871&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/PowerPC/PPCTargetObjectFile.h (original)
> +++ llvm/trunk/lib/Target/PowerPC/PPCTargetObjectFile.h Thu Jan 23
> 00:47:25 2014
> @@ -22,9 +22,10 @@ namespace llvm {
>
>      virtual void Initialize(MCContext &Ctx, const TargetMachine &TM);
>
> -    virtual const MCSection *
> -    SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
> -                           Mangler *Mang, const TargetMachine &TM) const;
> +    virtual const MCSection *SelectSectionForGlobal(const GlobalValue *GV,
> +                                                    SectionKind Kind,
> +                                                    Mangler *Mang,
> +                                                    TargetMachine &TM)
> const;
>
>      /// \brief Describe a TLS variable address within debug info.
>      virtual const MCExpr *getDebugThreadLocalSymbol(const MCSymbol *Sym)
> const;
>
> Modified: llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp?rev=199871&r1=199870&r2=199871&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp (original)
> +++ llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp Thu Jan 23 00:47:25
> 2014
> @@ -265,7 +265,7 @@ SectionKind TargetLoweringObjectFile::ge
>  /// be passed external (or available externally) globals.
>  const MCSection *TargetLoweringObjectFile::
>  SectionForGlobal(const GlobalValue *GV, SectionKind Kind, Mangler *Mang,
> -                 const TargetMachine &TM) const {
> +                 TargetMachine &TM) const {
>    // Select section name.
>    if (GV->hasSection())
>      return getExplicitSectionGlobal(GV, Kind, Mang, TM);
> @@ -277,11 +277,9 @@ SectionForGlobal(const GlobalValue *GV,
>
>
>  // Lame default implementation. Calculate the section name for global.
> -const MCSection *
> -TargetLoweringObjectFile::SelectSectionForGlobal(const GlobalValue *GV,
> -                                                 SectionKind Kind,
> -                                                 Mangler *Mang,
> -                                                 const TargetMachine &TM)
> const{
> +const MCSection *TargetLoweringObjectFile::SelectSectionForGlobal(
> +    const GlobalValue *GV, SectionKind Kind, Mangler *Mang,
> +    TargetMachine &TM) const {
>    assert(!Kind.isThreadLocal() && "Doesn't support TLS");
>
>    if (Kind.isText())
>
> Modified: llvm/trunk/lib/Target/TargetMachine.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetMachine.cpp?rev=199871&r1=199870&r2=199871&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/TargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/TargetMachine.cpp Thu Jan 23 00:47:25 2014
> @@ -55,6 +55,7 @@ TargetMachine::TargetMachine(const Targe
>      MCUseLoc(true),
>      MCUseCFI(true),
>      MCUseDwarfDirectory(false),
> +    DebugUseUniqueSections(false),
>      RequireStructuredCFG(false),
>      Options(Options) {
>  }
>
> Modified: llvm/trunk/lib/Target/XCore/XCoreTargetObjectFile.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreTargetObjectFile.cpp?rev=199871&r1=199870&r2=199871&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/XCore/XCoreTargetObjectFile.cpp (original)
> +++ llvm/trunk/lib/Target/XCore/XCoreTargetObjectFile.cpp Thu Jan 23
> 00:47:25 2014
> @@ -130,7 +130,7 @@ getExplicitSectionGlobal(const GlobalVal
>
>  const MCSection *XCoreTargetObjectFile::
>  SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind, Mangler
> *Mang,
> -                       const TargetMachine &TM) const{
> +                       TargetMachine &TM) const{
>    if (Kind.isText())                      return TextSection;
>    if (Kind.isMergeable1ByteCString())     return CStringSection;
>    if (Kind.isMergeableConst4())           return MergeableConst4Section;
>
> Modified: llvm/trunk/lib/Target/XCore/XCoreTargetObjectFile.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreTargetObjectFile.h?rev=199871&r1=199870&r2=199871&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/XCore/XCoreTargetObjectFile.h (original)
> +++ llvm/trunk/lib/Target/XCore/XCoreTargetObjectFile.h Thu Jan 23
> 00:47:25 2014
> @@ -27,9 +27,10 @@ static const unsigned CodeModelLargeSize
>      getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
>                               Mangler *Mang, const TargetMachine &TM)
> const;
>
> -    virtual const MCSection *
> -    SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
> -                           Mangler *Mang, const TargetMachine &TM) const;
> +    virtual const MCSection *SelectSectionForGlobal(const GlobalValue *GV,
> +                                                    SectionKind Kind,
> +                                                    Mangler *Mang,
> +                                                    TargetMachine &TM)
> const;
>
>      virtual const MCSection *getSectionForConstant(SectionKind Kind)
> const;
>    };
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140124/f2097e2d/attachment.html>


More information about the llvm-commits mailing list