[PATCH] D134589: [C++20][Modules] Elide unused guard variables in Itanium ABI module initializers.

David Blaikie via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sat Sep 24 08:45:46 PDT 2022


dblaikie added inline comments.


================
Comment at: clang/lib/CodeGen/CGDeclCXX.cpp:690-695
+  // If we have an empty initializer then we do not want to create a guard var.
+  // 'Empty' needs only to apply to init functions that we call directly, calls
+  // to imported module initializers need not be counted since those will
+  // contain local guards as needed (and might themselves be empty).
+  bool ElideGuard = PrioritizedCXXGlobalInits.empty() && CXXGlobalInits.empty();
+
----------------
Usually I'd expect this to be sunk down closer to its usage - any particular reason to have it up here? (not super far away, but seems further away than I'd expect)


================
Comment at: clang/lib/CodeGen/CGDeclCXX.cpp:738
+    if (ElideGuard) {
+      CodeGenFunction(*this).GenerateCXXGlobalInitFunc(Fn, ModuleInits);
+    } else {
----------------
Could we avoid duplicating this call, by doing something like this:
```
ConstantAddress Guard = ConstantAddress::invalid()
if (!PrioritizedCXXGlobalInits.empty() || !CXXGlobalInits.empty())
  Guard = ConstantAddress(new GlobalVariable(...), Int8Ty, GuardAlign);
CodeGenFunction(*this).GenerateCXXGlobalInitFunc(Fn, ModuleInits, Guard);
```
?


================
Comment at: clang/test/CodeGenCXX/module-initializer-guard-elision.cpp:22-43
+// This module has no global inits and does not import any other module
+//--- O.cpp
+
+export module O;
+
+export int foo ();
+
----------------
If it's pretty stable/reliable/not too brittle, maybe worth CHECKing the whole function in these cases (CHECK+CHECK-NEXT etc) to demonstrate they have nothing in them other than the return, or the call+return?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D134589



More information about the cfe-commits mailing list