ChuanqiXu added a comment.

LGTM. Thanks.



================
Comment at: clang/include/clang/Sema/Sema.h:2278
+
+  /// For an interface unit, this is the implicitly imported interface unit.
+  clang::Module *ThePrimaryInterface = nullptr;
----------------



================
Comment at: clang/lib/Sema/SemaDecl.cpp:1672-1677
+  // A module implementation unit has visibility of the decls in its implicitly
+  // imported interface.
+  if (getLangOpts().CPlusPlusModules && NewM && OldM &&
+      NewM->Kind == Module::ModuleImplementationUnit &&
+      OldM->Kind == Module::ModuleInterfaceUnit && NewM->Name == OldM->Name)
+    return false;
----------------
iains wrote:
> ChuanqiXu wrote:
> > iains wrote:
> > > ChuanqiXu wrote:
> > > > I feel slightly better to add a field in Sema:
> > > > 
> > > > ```
> > > > Module *PrimaryModuleInterface = nullptr; // Only valid if we're 
> > > > parsing a module unit.
> > > > ```
> > > > 
> > > > Then we can avoid the string compare here.  Also we can add it to 
> > > > `Sema::isUsableModule`. Now `Sema::isUsableModule` works because it 
> > > > falls to the string comparison.
> > > I also thought about doing this, but decided that we should try to keep 
> > > the interface regular - so that all modules are treated the same.
> > > 
> > > If we find that the string comparison for primary module name is a "hot 
> > > spot" then we should address it a different way - by caching an 
> > > identifier or similar (since we need to compare it in other places too).
> > It just smells bad. I did profiling for the performance for modules these 
> > days. And it looks like the string comparison can hard to be the hot spot. 
> > The bottleneck lives in other places. The string comparison may be in the 
> > long tail. So we might not be able to prove this one by giving numbers. But 
> > it indeed smells bad and we can solve it simply. So let's make it. I think 
> > it is important to improve our code quality.
> I have done this (for now) to make progress.
> 
> but, actually, in this case, I do not agree with the mechanism
> 
> .. instead of making this into a special case we should (as part of the 
> following fixes to lookup) make efficient helpers in module / sema that allow 
> us to see "same TU", "same named module" etc.  That way we can improve the 
> performance of any one of those if it becomes an issue.
> 
Yeah, I tried to use hash algorithm to avoid the string comparison. But there 
is a concern that the hash algorithm is not safe. And I found the string 
comparison is not the bottle neck then. So I think it may not be too late to 
perform it actually if there is related bug report.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D126959

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

Reply via email to