[PATCH] D11969: Avoid using of DataLayout::getPointerSize() without address space argument in DWARF info generation

Justin Bogner via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 11 23:20:09 PDT 2015


Stanislav Mekhanoshin via llvm-commits <llvm-commits at lists.llvm.org>
writes:
> rampitec created this revision.
> rampitec added reviewers: arsenm, joker-eph, echristo.
> rampitec added a subscriber: llvm-commits.
> rampitec set the repository for this revision to rL LLVM.
>
> DataLayout::getPointerSize() supposed to be used with the address
> space argument, though it has default value 0 for the transition
> period. There are the cases when some kind of a general pointer size
> is desirable, such as with debug info. In some places DataLayout is
> used though. This creates problem if target is 64 bit, but some
> address spaces are 32 bit, and notably if address space 0 has 32 bit
> pointers in 64 bit mode. An example of such target is HSAIL.
>
> In this change calls to DataLayout::getPointerSize() are replaced with
> recently added AsmPrinter::getPointerSize() in DWARF debug code. The
> AsmPrinter::getPointerSize() itself is modified to call
> MAI->getPointerSize(). Originally it was calling
> TargetMachine::getPointerSize() which ends up in the
> DataLayout::getPointerSize() with the default argument. Since this
> call is not virtual in both AsmPrinter and TargetMachine that makes a
> little sense to override it in the target implementation for DWARF
> info purposes. The MCAsmInfo implementation has the benefit to query
> member variable PointerSize which can be previously initialized by the
> target, thus target will have control over the returned value.
>
> In LLVM 3.6 many (but not all) of the getPointerSize() references in
> DWARF info were pointing to the MAI implementation, but recently that
> was changed to the new AsmPrinter and TargetMachine functions.

I don't fully understand how DL.getPointerSize() and MAI.getPointerSize()
differ, but this change definitely needs a test along with it.

> Repository:
>   rL LLVM
>
> http://reviews.llvm.org/D11969
>
> Files:
>   lib/CodeGen/AsmPrinter/AsmPrinter.cpp
>   lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
>   lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
>   lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>   lib/CodeGen/AsmPrinter/DwarfUnit.cpp
>
> Index: lib/CodeGen/AsmPrinter/DwarfUnit.cpp
> ===================================================================
> --- lib/CodeGen/AsmPrinter/DwarfUnit.cpp
> +++ lib/CodeGen/AsmPrinter/DwarfUnit.cpp
> @@ -1517,7 +1517,7 @@
>                                  UseOffsets);
>
>    Asm->OutStreamer->AddComment("Address Size (in bytes)");
> -  Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
> +  Asm->EmitInt8(Asm->getPointerSize());
>  }
>
>  void DwarfUnit::initSection(MCSection *Section) {
> Index: lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> ===================================================================
> --- lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> +++ lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> @@ -1589,7 +1589,7 @@
>    // Start the dwarf loc section.
>    Asm->OutStreamer->SwitchSection(
>        Asm->getObjFileLowering().getDwarfLocSection());
> -  unsigned char Size = Asm->getDataLayout().getPointerSize();
> +  unsigned char Size = Asm->getPointerSize();
>    for (const auto &List : DebugLocs.getLists()) {
>      Asm->OutStreamer->EmitLabel(List.Label);
>      const DwarfCompileUnit *CU = List.CU;
> @@ -1727,7 +1727,7 @@
>    Asm->OutStreamer->SwitchSection(
>        Asm->getObjFileLowering().getDwarfARangesSection());
>
> -  unsigned PtrSize = Asm->getDataLayout().getPointerSize();
> +  unsigned PtrSize = Asm->getPointerSize();
>
>    // Build a list of CUs used.
>    std::vector<DwarfCompileUnit *> CUs;
> @@ -1809,7 +1809,7 @@
>        Asm->getObjFileLowering().getDwarfRangesSection());
>
>    // Size for our labels.
> -  unsigned char Size = Asm->getDataLayout().getPointerSize();
> +  unsigned char Size = Asm->getPointerSize();
>
>    // Grab the specific ranges for the compile units in the module.
>    for (const auto &I : CUMap) {
> Index: lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
> ===================================================================
> --- lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
> +++ lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
> @@ -155,7 +155,7 @@
>          // TODO: add debug info for emulated thread local mode.
>        } else {
>          // FIXME: Make this work with -gsplit-dwarf.
> -        unsigned PointerSize = Asm->getDataLayout().getPointerSize();
> +        unsigned PointerSize = Asm->getPointerSize();
>          assert((PointerSize == 4 || PointerSize == 8) &&
>                 "Add support for other sizes if necessary");
>          // Based on GCC's support for TLS:
> Index: lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
> ===================================================================
> --- lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
> +++ lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
> @@ -134,7 +134,7 @@
>    default:
>      llvm_unreachable("Invalid encoded value.");
>    case dwarf::DW_EH_PE_absptr:
> -    return MF->getDataLayout().getPointerSize();
> +    return MAI->getPointerSize();
>    case dwarf::DW_EH_PE_udata2:
>      return 2;
>    case dwarf::DW_EH_PE_udata4:
> Index: lib/CodeGen/AsmPrinter/AsmPrinter.cpp
> ===================================================================
> --- lib/CodeGen/AsmPrinter/AsmPrinter.cpp
> +++ lib/CodeGen/AsmPrinter/AsmPrinter.cpp
> @@ -141,7 +141,7 @@
>
>  // Do not use the cached DataLayout because some client use it without a Module
>  // (llmv-dsymutil, llvm-dwarfdump).
> -unsigned AsmPrinter::getPointerSize() const { return TM.getPointerSize(); }
> +unsigned AsmPrinter::getPointerSize() const { return MAI->getPointerSize(); }
>
>  const MCSubtargetInfo &AsmPrinter::getSubtargetInfo() const {
>    assert(MF && "getSubtargetInfo requires a valid MachineFunction!");
>
>
> Index: lib/CodeGen/AsmPrinter/DwarfUnit.cpp
> ===================================================================
> --- lib/CodeGen/AsmPrinter/DwarfUnit.cpp
> +++ lib/CodeGen/AsmPrinter/DwarfUnit.cpp
> @@ -1517,7 +1517,7 @@
>                                  UseOffsets);
>
>    Asm->OutStreamer->AddComment("Address Size (in bytes)");
> -  Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
> +  Asm->EmitInt8(Asm->getPointerSize());
>  }
>
>  void DwarfUnit::initSection(MCSection *Section) {
> Index: lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> ===================================================================
> --- lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> +++ lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> @@ -1589,7 +1589,7 @@
>    // Start the dwarf loc section.
>    Asm->OutStreamer->SwitchSection(
>        Asm->getObjFileLowering().getDwarfLocSection());
> -  unsigned char Size = Asm->getDataLayout().getPointerSize();
> +  unsigned char Size = Asm->getPointerSize();
>    for (const auto &List : DebugLocs.getLists()) {
>      Asm->OutStreamer->EmitLabel(List.Label);
>      const DwarfCompileUnit *CU = List.CU;
> @@ -1727,7 +1727,7 @@
>    Asm->OutStreamer->SwitchSection(
>        Asm->getObjFileLowering().getDwarfARangesSection());
>
> -  unsigned PtrSize = Asm->getDataLayout().getPointerSize();
> +  unsigned PtrSize = Asm->getPointerSize();
>
>    // Build a list of CUs used.
>    std::vector<DwarfCompileUnit *> CUs;
> @@ -1809,7 +1809,7 @@
>        Asm->getObjFileLowering().getDwarfRangesSection());
>
>    // Size for our labels.
> -  unsigned char Size = Asm->getDataLayout().getPointerSize();
> +  unsigned char Size = Asm->getPointerSize();
>
>    // Grab the specific ranges for the compile units in the module.
>    for (const auto &I : CUMap) {
> Index: lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
> ===================================================================
> --- lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
> +++ lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
> @@ -155,7 +155,7 @@
>          // TODO: add debug info for emulated thread local mode.
>        } else {
>          // FIXME: Make this work with -gsplit-dwarf.
> -        unsigned PointerSize = Asm->getDataLayout().getPointerSize();
> +        unsigned PointerSize = Asm->getPointerSize();
>          assert((PointerSize == 4 || PointerSize == 8) &&
>                 "Add support for other sizes if necessary");
>          // Based on GCC's support for TLS:
> Index: lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
> ===================================================================
> --- lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
> +++ lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
> @@ -134,7 +134,7 @@
>    default:
>      llvm_unreachable("Invalid encoded value.");
>    case dwarf::DW_EH_PE_absptr:
> -    return MF->getDataLayout().getPointerSize();
> +    return MAI->getPointerSize();
>    case dwarf::DW_EH_PE_udata2:
>      return 2;
>    case dwarf::DW_EH_PE_udata4:
> Index: lib/CodeGen/AsmPrinter/AsmPrinter.cpp
> ===================================================================
> --- lib/CodeGen/AsmPrinter/AsmPrinter.cpp
> +++ lib/CodeGen/AsmPrinter/AsmPrinter.cpp
> @@ -141,7 +141,7 @@
>
>  // Do not use the cached DataLayout because some client use it without a Module
>  // (llmv-dsymutil, llvm-dwarfdump).
> -unsigned AsmPrinter::getPointerSize() const { return TM.getPointerSize(); }
> +unsigned AsmPrinter::getPointerSize() const { return MAI->getPointerSize(); }
>
>  const MCSubtargetInfo &AsmPrinter::getSubtargetInfo() const {
>    assert(MF && "getSubtargetInfo requires a valid MachineFunction!");
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list