rjmccall added inline comments.

================
Comment at: clang/docs/LanguageExtensions.rst:2443
+  // Computes a unique stable name for the type of the given expression.
+  constexpr const char * __builtin_unique_stable_name( expression );
+
----------------
These need to be updated for the rename.  You should just grep the patch for 
the old name.


================
Comment at: clang/include/clang/AST/Expr.h:2045
+// representation of the type (or type of the expression) in a way that permits
+// us to properly encode information about the SYCL kernels.
+class UniqueStableNameExpr final
----------------
rjmccall wrote:
> Since this is really just for internal use in system headers (right?), is 
> there a need for it to be as flexible as this about whether it takes an 
> expression or a type?
That said, I don't really have a strong objection to supporting either a type 
or an expression operand.


================
Comment at: clang/lib/AST/ItaniumMangle.cpp:1977
+  if (Context.getShouldCallKernelCallback()(Context.getASTContext(), Lambda)) {
+    Context.getKernelMangleCallback()(Context.getASTContext(), Lambda, Out);
+    Out << '_';
----------------
erichkeane wrote:
> rjmccall wrote:
> > This basically assumes that the callback is only changing the 
> > discriminator.  And in fact, we already have this "device lambda mangling 
> > number" concept that we use in different modes with similar problems to 
> > SYCL.  Can we unify these and just provide one way for the context to opt 
> > in to overriding discriminators?
> I was unable to find a way to get the device lambda mangling number to work 
> in this situation unfortunately, it seems to have significantly different 
> needs from what we need here.  
> 
> Part of what SYCL needs is the ability to 'recalculate' this number as we 
> discover that a lambda is participating in naming a SYCL kernel. The 
> DeviceLambdaMangling mechanism requires that it be evaluated as we are 
> generating the lambdas.  I couldn't find a mechanism to update them after the 
> fact that wasn't messier than the callback mechanism.
> 
> As far as assuming that we are changing only the discriminator, that ends up 
> being required since this is the only location where a lambda mangling is 
> 'customizable', and we want it to remain demanglable.
> 
Sorry, I didn't mean that you should try to make the SYCL logic just set a 
device mangling number; in fact, I meant almost the reverse.  The device 
mangling number is ultimately a MangleContext-driven override of the 
discriminator choice, just like you're trying to add for SYCL.  For SYCL, 
you're adding a generalized callback mechanism, which seems good.  What I'm 
asking is that you go ahead and move  the existing device-mangling logic in the 
mangler over to that callback mechanism, so that instead of setting an 
`isDeviceMangleContext()` bit on the MangleContext, that code will install an 
discriminator-override callback that returns the device lambda mangling number. 
 Then we have one mechanism instead of two.

I think the right API for that callback is just to have it return an 
`Optional<unsigned>`, and then you use the normal discriminator if it returns 
`None`.  And it should take an arbitrary `Decl*` so that it can override 
discriminators on non-lambda local declarations if it wants.


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

https://reviews.llvm.org/D103112

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

Reply via email to