================
@@ -1832,6 +1832,7 @@ CharUnits ASTContext::getDeclAlign(const Decl *D, bool 
ForAlignof) const {
         uint64_t TypeSize =
             !BaseT->isIncompleteType() ? getTypeSize(T.getTypePtr()) : 0;
         Align = std::max(Align, getMinGlobalAlignOfVar(TypeSize, VD));
+        Align = std::max(Align, getLargeGlobalPreferredAlign(TypeSize, Align));
----------------
wsxarcher wrote:

Thanks for the valuable explanation, I now realized that our implementation did 
not cover every possible case as it was tested in production only in Edge where 
almost all is statically compiled.

I now added all the cases to skip this optimizations based of 
GlobalObject::canIncreaseAlignment() logic.
By the way this optimization resulted in measurable improvements in our 
workload.

You mentioned that following llvm opt passes could also do this but it does not 
seem to work as well as doing it in clang. One example that's easy to test is 
in the test cases, `clang/test/OpenMP/atomic_capture_codegen.cpp` which with 
this optimization it avoid using external calls for atomics, while even on -O2 
it kept calling them.


https://github.com/llvm/llvm-project/pull/185487
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to