aeubanks added a comment.

the assert that there are no public.type.tests in LTT fails on 
`CodeGenCXX/thinlto-distributed-type-metadata.cpp`. for some reason clang 
doesn't go through the LTO API at [1], it just ends up calling the normal 
optimization pipeline. any ideas why?

[1] 
https://github.com/llvm/llvm-project/blob/0c1b32717bcffcf8edf95294e98933bd4c1e76ed/clang/lib/CodeGen/BackendUtil.cpp#L1173



================
Comment at: clang/test/CodeGenCXX/thinlto-distributed-type-metadata.cpp:22
 // OPT-NOT: @llvm.type.test
-// OPT-NOT: call void @llvm.assume
 // We should have only one @llvm.assume call, the one that was expanded
----------------
tejohnson wrote:
> aeubanks wrote:
> > tejohnson wrote:
> > > Why remove this one here and below?
> > we end up RAUWing the `public.type.test` with true and end up with 
> > `assume(true)` which is harmless and gets removed by something like 
> > instcombine
> Sure, but it should still be gone and can confirm that here? If it isn't 
> useful to check for, then the comment should probably be changed too since it 
> mentions assumes.
There's an `-O0` RUN line below where the `assume(true)` won't be removed.
Updated comments.


================
Comment at: clang/test/CodeGenCXX/thinlto_public_type_test_distributed.ll:23
+; RUN:   -o %t.native.o -x ir %t.o --save-temps=obj
+; RUN: llvm-dis %t.native.o.1.promote.bc -o - | FileCheck %s 
--check-prefix=HIDDEN
+
----------------
tejohnson wrote:
> Is there a reason why the hidden version checks after promote but the public 
> version above checks after importing?
unintentional, fixed. I've changed everything to check 0.preopt since 1.promote 
wasn't appearing in some cases, not sure why


================
Comment at: lld/test/ELF/lto/update_public_type_test.ll:1
+; REQUIRES: x86
+
----------------
tejohnson wrote:
> aeubanks wrote:
> > tejohnson wrote:
> > > Add comments about what is being tested. Also good to test via llvm-lto2 
> > > which has a similar -whole-program-visibility option, rather than just 
> > > via lld here. See for example 
> > > llvm/test/ThinLTO/X86/devirt_vcall_vis_public.ll.
> > added comments
> > 
> > I extended llvm/test/ThinLTO/X86/devirt_vcall_vis_public.ll, is that ok?
> Yeah sure that's fine. But maybe also add a direct check there in both cases 
> after promote that the public.type.test/assume were transformed as expected 
> as you do in this test.
done


================
Comment at: llvm/lib/LTO/LTOBackend.cpp:595
 
+  updatePublicTypeTestCalls(Mod, Conf.HasWholeProgramVisibility);
+
----------------
aeubanks wrote:
> tejohnson wrote:
> > aeubanks wrote:
> > > tejohnson wrote:
> > > > aeubanks wrote:
> > > > > I'm not sure where the best place to put these is
> > > > I don't think that this will work for distributed ThinLTO, where the 
> > > > ThinLTO Backends are run via clang, which isn't going to have this 
> > > > config variable set (since it is set only during LTO linking). I think 
> > > > something may need to be recorded in the index as a flag there at thin 
> > > > link / indexing time that can be checked here.
> > > > 
> > > > It would then be nice to consolidate this handling into WPD itself, 
> > > > e.g. at the start of DevirtModule::run, but unfortunately we won't have 
> > > > a summary index for pure regular LTO WPD so I don't think that would 
> > > > work. So in here is ok but I would do it early to handle some of the 
> > > > early return cases.
> > > > 
> > > > (Please add a distributed ThinLTO test too)
> > > Added a distributed ThinLTO test: 
> > > clang/test/CodeGenCXX/thinlto_public_type_test_distributed.ll.
> > > 
> > > I added `ModuleSummaryIndex::WithWholeProgramVisibility` but I'm not sure 
> > > where I'd set it, and that's causing the test to fail.
> > I see from your most recent update that you added code to set/check this 
> > new index flag. But I think you would want to set it around the same place 
> > where we update the vcall visibility during the thin link (see calls to 
> > updateVCallVisibilityInIndex). And I would do it via a new method in the 
> > WPD source file that uses the existing hasWholeProgramVisibility() that 
> > checks the OR of the config flag or the internal option. Then you don't 
> > need to add a new flag to llvm-lto2 for this purpose.
> > 
> > Also, as I noted for the regular LTO handling elsewhere, I think you need 
> > to add similar handling for the legacy LTO implementation. See other 
> > callers to updateVCallVisibilityInIndex.
> ah, I needed a separate WPV flag in llvm-lto2 to set `llvm::lto::Config`, now 
> everything passes
exposed the existing `hasWholeProgramVisibility`


================
Comment at: llvm/lib/Transforms/IPO/LowerTypeTests.cpp:1849
+      dropTypeTests(M, *TypeTestFunc);
+    Function *PublicTypeTestFunc =
+        M.getFunction(Intrinsic::getName(Intrinsic::public_type_test));
----------------
tejohnson wrote:
> aeubanks wrote:
> > tejohnson wrote:
> > > Shouldn't we have converted all of these by now?
> > Hmm, I vaguely remember adding this because some clang test failed 
> > (something to do with the extra LTT we add in BackendUtil.cpp), but 
> > reverting this doesn't cause any failures.
> Related to some of my other comments about ensuring we do the conversion for 
> the legacy LTO interfaces, perhaps this we should assert here if there are 
> any remaining public.type.test intrinsics? Not sure what the failure mode is 
> if any of those stick around otherwise.
added a check


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D128955

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

Reply via email to