[PATCH] D142708: [NFC] Transition GlobalObject alignment from MaybeAlign to Align

Guillaume Chatelet via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 30 02:56:14 PST 2023


gchatelet marked an inline comment as done.
gchatelet added a comment.

In D142708#4086420 <https://reviews.llvm.org/D142708#4086420>, @efriedma wrote:

> In D142708#4085789 <https://reviews.llvm.org/D142708#4085789>, @gchatelet wrote:
>
>> Which is basically `std::max(InAlign, Align(1))` or simply `Align(1)` as I don't see an obvious value for `InAlign` other than `1`.
>
> Some callers pass in other values.

Yes indeed, the only call to this function specifying the `InAlign` argument is this one <https://github.com/llvm/llvm-project/blob/72121a20cda4dc91d0ef5548f93046e71c5ec6f6/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp#L2833>, appearing in `AsmPrinter::emitAlignment`.
Unfortunately this one is called a lot (32 instances). There are some arch specific tunings as well :-/

  llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp:810:      emitAlignment(Alignment, GV);
  llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp:846:  emitAlignment(Alignment, GV);
  llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp:903:    emitAlignment(MF->getAlignment(), &F);
  llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp:2145:      emitAlignment(Align(DL.getPointerSize()));
  llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp:2172:        emitAlignment(Align(DL.getPointerSize()));
  llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp:2452:        emitAlignment(Align(CPSections[i].Alignment));
  llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp:2497:  emitAlignment(Align(MJTI->getEntryAlignment(DL)));
  llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp:2732:      emitAlignment(Align);
  llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp:2830:void AsmPrinter::emitAlignment(Align Alignment, const GlobalObject *GV,
  llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp:3691:    emitAlignment(Alignment, nullptr, MBB.getMaxBytesForAlignment());
  llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp:4021:    emitAlignment(Align(PointerSize));
  llvm/lib/CodeGen/AsmPrinter/EHStreamer.cpp:473:  Asm->emitAlignment(Align(4));
  llvm/lib/CodeGen/AsmPrinter/EHStreamer.cpp:673:        Asm->emitAlignment(Align(4));
  llvm/lib/CodeGen/AsmPrinter/EHStreamer.cpp:802:    Asm->emitAlignment(Align(4));
  llvm/lib/CodeGen/AsmPrinter/EHStreamer.cpp:806:  Asm->emitAlignment(Align(4));
  llvm/lib/CodeGen/AsmPrinter/ErlangGCPrinter.cpp:72:    AP.emitAlignment(IntPtrSize == 4 ? Align(4) : Align(8));
  llvm/lib/CodeGen/AsmPrinter/OcamlGCPrinter.cpp:128:  AP.emitAlignment(IntPtrSize == 4 ? Align(4) : Align(8));
  llvm/lib/CodeGen/AsmPrinter/OcamlGCPrinter.cpp:179:      AP.emitAlignment(IntPtrSize == 4 ? Align(4) : Align(8));
  llvm/lib/CodeGen/AsmPrinter/WinException.cpp:208:    Asm->emitAlignment(std::max(Asm->MF->getAlignment(), MBB.getAlignment()),
  llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp:946:    emitAlignment(Align(Size));
  llvm/lib/Target/ARM/ARMAsmPrinter.cpp:179:    emitAlignment(Align(2));
  llvm/lib/Target/ARM/ARMAsmPrinter.cpp:537:      emitAlignment(Align(4));
  llvm/lib/Target/ARM/ARMAsmPrinter.cpp:550:      emitAlignment(Align(4));
  llvm/lib/Target/ARM/ARMAsmPrinter.cpp:983:  emitAlignment(Align(4));
  llvm/lib/Target/ARM/ARMAsmPrinter.cpp:1029:  emitAlignment(Align(4));
  llvm/lib/Target/ARM/ARMAsmPrinter.cpp:1058:    emitAlignment(Align(4));
  llvm/lib/Target/ARM/ARMAsmPrinter.cpp:1101:  emitAlignment(Align(2));
  llvm/lib/Target/Mips/MipsAsmPrinter.cpp:406:    emitAlignment(std::max(MF->getAlignment(), MIPS_NACL_BUNDLE_ALIGN));
  llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp:2443:  emitAlignment(getGVAlignment(GV, DL), GV);
  llvm/lib/Target/X86/X86AsmPrinter.cpp:774:      emitAlignment(WordSize == 4 ? Align(4) : Align(8));
  llvm/lib/Target/X86/X86AsmPrinter.cpp:784:      emitAlignment(WordSize == 4 ? Align(4) : Align(8)); // padding
  llvm/lib/Target/XCore/XCoreAsmPrinter.cpp:145:  emitAlignment(std::max(Alignment, Align(4)), GV);



================
Comment at: llvm/include/llvm/IR/GlobalObject.h:86
+  /// Sets the alignment attribute of the GlobalObject.
+  void setAlignment(Align Align);
+
----------------
efriedma wrote:
> Not sure I understand the point of overloading setAlignment; there's an implicit conversion from Align to MaybeAlign.
The purpose here is to define a deprecation path for downstream users.
Once we've cleaned up calls in the LLVM repo we will mark the `void setAlignment(MaybeAlign Align);` with `LLVM_DEPRECATED` to help downstream users migrate to the new API.
It also helps catch all call sites by marking the function deprecated and compile the codebase with `-DLLVM_ENABLE_WERROR=ON`


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D142708/new/

https://reviews.llvm.org/D142708



More information about the llvm-commits mailing list