[PATCH] D84534: [AIX] Static init frontend recovery and backend support
Xiangling Liao via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 4 09:22:55 PDT 2020
Xiangling_L marked 6 inline comments as done.
Xiangling_L added inline comments.
================
Comment at: clang/lib/CodeGen/CodeGenModule.h:1058
+ /// Add an sterm finalizer to its own llvm.global_dtors entry.
+ void AddCXXStermFinalizerToGlobalDtor(llvm::Function *StermFinalizer,
+ int Priority) {
----------------
jasonliu wrote:
> This wrapper seems redundant. Calling ` AddGlobalDtor(StermFinalizer, Priority);` directly from the callee side already convey what we are trying to achieve here.
I added this wrapper function to keep the symmetry between `AddGlobalCtor` and `AddGlobalDtor`. They are private functions within `CodeGenModule` class. And I feel it's kinda weird to only move `AddGlobalDtor` to a public function.
================
Comment at: clang/lib/CodeGen/ItaniumCXXABI.cpp:4602
+ llvm::report_fatal_error(
+ "prioritized __sinit and __sterm functions are not yet supported");
+ else if (isTemplateInstantiation(D.getTemplateSpecializationKind()) ||
----------------
jasonliu wrote:
> Could we trigger this error? If so, could we have a test for it?
I should've put an assertion here. The init priority attribute has been disabled on AIX in the previous patch.
================
Comment at: llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp:1874
+ }
+ emitSpecialLLVMGlobal(&G);
+ continue;
----------------
jasonliu wrote:
> Have some suggestion on structure backend code change:
>
> 1. Remove `isSpecialLLVMGlobalArrayForStaticInit` and `isSpecialLLVMGlobalArrayToSkip`, and call `emitSpecialLLVMGlobal` directly instead. This would handle all the `llvm.` variable for us. We would need do early return for names start with `llvm.` in emitGlobalVariable as well, since they are all handled here.
>
> 2. We could override emitXXStructorList because how XCOFF handle the list is vastly different than the other target. We could make the common part(i.e. processing and sorting) a utility function, say "preprocessStructorList".
>
> 3. It's not necessary to use the same name `emitXXStructor` if the interface is different. It might not provide much help when we kinda know no other target is going to use this interface. So we could turn it into a lambda inside of the overrided emitXXStructorList, or simply no need for a new function because the logic is fairly straightforward.
>
1. As we discussed offline, we would leave the handling of `llvm.used` and `llvm.metadata` later and don't include them in the scope of this patch.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D84534/new/
https://reviews.llvm.org/D84534
More information about the llvm-commits
mailing list