manmanren added a comment.

In https://reviews.llvm.org/D23125#510632, @rsmith wrote:

> This doesn't seem like quite the right user interface for this feature. The 
> module cache is volatile, and it's not really reasonable for people to assume 
> they know what is and isn't within it. Instead, it seems like what we want to 
> provide is zero or more paths to directories containing prebuilt .pcm files 
> whose file names are the same as their top-level module names, completely 
> separate from the module cache.
>
> Specifically, rather than spelling this as `-fmodules-use-prebuilt-modules 
> -fmodules-cache-path=X`, I'd suggest spelling it as 
> `-fprebuilt-module-path=X` or similar (which can be repeated to provide 
> multiple search paths). That would then combine orthogonally with 
> `-fno-implicit-modules` and `-fno-implicit-module-maps`, where implicit 
> modules would still use the module cache. Does that make sense for your use 
> case?


What we want is to achieve performance by prebuilding the modules and using 
@import to load the corresponding pcm without  parsing the module maps. In 
ASTReader, we want to treat these modules in the same way as the explicit 
modules.

-fprebuilt-module-path sounds reasonable. Let me see how the implementation 
goes ...

> You're also missing updates to the modules documentation.


Yes, I will update the document.

Cheers,
Manman


================
Comment at: lib/Frontend/CompilerInstance.cpp:1502-1510
@@ -1477,1 +1501,11 @@
     case ASTReader::Missing: {
+      if (HSOpts.ModulesUsePrebuiltModules) {
+        // We can't rebuild the module without a module map. Throw diagnostics
+        // here if using prebuilt modules.
+        getDiagnostics().Report(ModuleNameLoc, diag::err_module_not_found)
+        << ModuleName
+        << SourceRange(ImportLoc, ModuleNameLoc);
+        ModuleBuildFailed = true;
+        return ModuleLoadResult();
+      }
+
----------------
rsmith wrote:
> You requested that `ReadAST` produces diagnostics for the `OutOfDate` and 
> `Missing` cases when using prebuilt modules, so this diagnostic is redundant.
Yes, I can remove this diagnostic.

================
Comment at: lib/Serialization/ASTReader.cpp:495-498
@@ -494,1 +494,6 @@
 
+static bool isPrebuiltModule(Preprocessor &PP, ModuleKind MK) {
+  return (MK == MK_ExplicitModule || MK == MK_ImplicitModule) &&
+      PP.getHeaderSearchInfo().getHeaderSearchOpts().ModulesUsePrebuiltModules;
+}
+
----------------
rsmith wrote:
> This seems unnecessarily complicated. Perhaps you could make 
> `CompilerInstance::loadModule` treat all prebuilt modules as 
> `MK_ExplicitModule`, or add a third `ModuleKind` for them?
I tried adding a ModuleKind at some point, but somehow it didn't work out. I 
will take another look at that.


https://reviews.llvm.org/D23125



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to