steven_wu added inline comments.

================
Comment at: clang/lib/Frontend/CompilerInvocation.cpp:1729
+  if (!Opts.ProfileInstrumentUsePath.empty()) {
+    auto FS = llvm::vfs::getRealFileSystem();
+    setPGOUseInstrumentor(Opts, Opts.ProfileInstrumentUsePath, *FS, Diags);
----------------
akyrtzi wrote:
> steven_wu wrote:
> > akyrtzi wrote:
> > > Could we propagate the VFS that the `CompilerInvocation` is going to 
> > > create here? Otherwise this seems like a hidden "landmine" that someone 
> > > is bound to trip on later on.
> > Currently, Profile look up doesn't go through any VFS, so vfs overlay has 
> > no effect on profiles. Putting through VFS is changing behavior, even I 
> > think it is for good.
> > 
> > It also has the potential to make code harder to read because creating VFS 
> > relies on a compiler invocation which we are creating here.
> > 
> > Let me add a fixme here first. 
> > Currently, Profile look up doesn't go through any VFS, so vfs overlay has 
> > no effect on profiles. Putting through VFS is changing behavior, even I 
> > think it is for good.
> 
> Your patch is already changing behavior; CodeGen will load profiles using 
> clang's VFS, so vfs overlay will affect how profiles are loaded. The mismatch 
> is that CodeGen will load the path using clang's VFS but 
> `setPGOUseInstrumentor` will load it directly from real file-system, so they 
> can be out-of-sync.
> 
> On second look, `setPGOUseInstrumentor` seems to create a throw-away 
> `IndexedInstrProfReader` just for reading a couple of settings to set some 
> flags. This seems redundant, could we move the determination of these flags 
> at the point where `CodeGenModule` is creating its own 
> `IndexedInstrProfReader` and remove `setPGOUseInstrumentor` from 
> `CompilerInvocation::ParseCodeGenArgs` entirely?
I will take a look. The current implementation is not very good as it just read 
it to determine the type of the profile to set the action. I agree the 
disconnect between two reads is bad.


================
Comment at: llvm/include/llvm/Support/PGOOptions.h:18
 #include "llvm/Support/Error.h"
+#include "llvm/Support/VirtualFileSystem.h"
 
----------------
akyrtzi wrote:
> akyrtzi wrote:
> > I'd suggest to consider moving the `PGOOptions` constructor out-of-line, 
> > along with
> > ```
> >   PGOOptions &operator=(const PGOOptions &O);
> >   PGOOptions(const PGOOptions&);
> >   ~PGOOptions();
> > ```
> >  in order to forward-declare here and avoid including the header, avoiding 
> > the additional include dependencies for many cpp files.
> > The default parameter needs to instantiate here and pretty much all 
> > references to `PGOOptions` has `Optional<PGOOptions>` which requires 
> > including VFS. I will leave this one since `PGOOptions.h` is a rare header 
> > to include.
> 
> `PGOOptions.h` is transitively included by many files, if I touch that 
> header, and then compile `clang`, there are 225 files that need to be 
> re-compiled.
> 
> I thought that moving the `PGOOptions` members I mentioned out-of-line would 
> be enough to avoid the need to include `VirtualFileSystem.h`, is this not the 
> case?
I see. It is included in two different headers in the backend, both of them has 
`Optional<PGOOptions>`. During my experiment, to instantiate 
`Optional<PGOOptions>`, it needs full declaration for PGOOptions, thus 
FileSystem. I could be wrong but I don't see a way around that.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D139052

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

Reply via email to