hassnaaHamdi wrote: > Thanks for your patience - I needed to think about the best option to use for > the new functionality, and what this should look like longer term. I found > one used by gcc for this purpose, -fdevirtualize-speculatively, see info in > comments below. I have some comments sprinkled throughout but here is a > summary along with a suggestion for splitting the patch and how to structure. > > Long-term, ideally we can always do speculative devirtualization (probably > under the above option), for any public visibility vtable, and > non-speculative devirt for any hidden ones (which might include those that > were originally public under LTO and whole program visibility options that > separately convert the visibility). The eventually state should probably be > something like: > > ``` > +------------------------------------+------------------------------------+------------------------------------+ > | LTO+WPV | -fdevirtualize-speculatively off | > -fdevirtualize-speculatively on | > +------------------------------------+------------------------------------+------------------------------------+ > | off | none | > spec devirt for all vis (or just | > | | | > public and non-spec devirt for | > | | | > hidden vis?) | > +------------------------------------+------------------------------------+------------------------------------+ > | on | non-spec devirt for hidden vis | > non-spec devirt for hidden vis and | > | | | > spec devirt for public vis | > +------------------------------------+------------------------------------+------------------------------------+ > ``` > > (hopefully that renders ok) > > I'd suggest staging the changes like this: > > PR 1: LLVM changes only, using a cl::opt that generically enables speculative > devirt (and TODOs noting that the code should eventually support spec devirt > for any public visibility vtables longer term) PR 2: clang changes to add new > option and LLVM pipeline changes to enable the new optimization (probably > WPV+LTO overriding it for now with TODO noting longer term plan). PR 3 > (longer term): conditionally doing spec devirt for public visibility vtables
PR1 is ready: https://github.com/llvm/llvm-project/pull/159048 https://github.com/llvm/llvm-project/pull/145031 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
