tejohnson added inline comments.

================
Comment at: llvm/lib/LTO/LTOBackend.cpp:151
 
+  TargetMachine::initTargetOptions(M, Conf.Options);
+
----------------
lenary wrote:
> tejohnson wrote:
> > This is going to be problematic. The Conf is a reference to the Config 
> > object saved on the LTO class instance shared by all backend invocations 
> > (the regular LTO module if one exists and any ThinLTO modules). They will 
> > end up clobbering each other's values here - although from the assert in 
> > initTargetOptions I see they are required to all have the same value 
> > anyway. Still, it is not good as the assert may actually be missed with 
> > unlucky interference between the threads. The Config object here should 
> > really be marked const, let me see if I can change that.
> > 
> > You could make a copy of the Config here, but that essentially misses the 
> > assertion completely. 
> > 
> > A better way to do this would be in LTO::addModule, which is invoked 
> > serially to add each Module to the LTO object.
> > 
> > However - this misses other places that invoke createTargetMachine - should 
> > other places be looking at this new module flag as well? One example I can 
> > think of is the old LTO API (*LTOCodeGenerator.cpp files), used by linkers 
> > such as ld64 and some other proprietary linkers and the llvm-lto testing 
> > tool. But I have no idea about other invocations of createTargetMachine.
> > 
> > Note that changes to LTO.cpp/LTOBackend.cpp (the new LTO API) needs some 
> > kind of llvm-lto2 based test.
> Thank you for this feedback. 
> 
> I've been looking at how to add an overridable TargetMachine hook which is 
> not dissimilar to this static function, but is overridable by TargetMachine 
> subclasses. It sounds like this approach will also not work (unless the 
> TargetMachine is allowed to update its (Default)Options in LTO without 
> issue). 
> 
> I am hoping to get a patch out today for review (which does not include the 
> RISC-V specific parts of this patch, and only includes a default empty 
> implementation), but I imagine it will remain unsatisfactory for LTO for the 
> same reasons this is.
Presumably you could still do the same thing I'm suggesting here - validate and 
aggregate the value across modules in LTO::addModule. Then your hook would just 
check the aggregated setting on the Config.


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

https://reviews.llvm.org/D72245



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

Reply via email to