[clang] [SYCL] Basic code generation for SYCL kernel caller offload entry point functions. (PR #133030)
Tom Honermann via cfe-commits
cfe-commits at lists.llvm.org
Mon Apr 14 11:10:19 PDT 2025
================
@@ -14794,9 +14803,36 @@ void ASTContext::getFunctionFeatureMap(llvm::StringMap<bool> &FeatureMap,
}
}
-static SYCLKernelInfo BuildSYCLKernelInfo(CanQualType KernelNameType,
+static SYCLKernelInfo BuildSYCLKernelInfo(ASTContext &Context,
+ CanQualType KernelNameType,
const FunctionDecl *FD) {
- return {KernelNameType, FD};
+ // Host and device compilation may use different ABIs and different ABIs
+ // may allocate name mangling discriminators differently. A discriminator
+ // override is used to ensure consistent discriminator allocation across
+ // host and device compilation.
+ auto DeviceDiscriminatorOverrider =
+ [](ASTContext &Ctx, const NamedDecl *ND) -> std::optional<unsigned> {
+ if (const auto *RD = dyn_cast<CXXRecordDecl>(ND))
+ if (RD->isLambda())
----------------
tahonermann wrote:
Why do you believe that device mangling numbers are assigned differently for non-generic lambdas vs generic lambdas? I don't see any reason that they would be treated differently. Can you point to relevant code? The device mangling number applies to the (single) closure type produced by a (generic) lambda.
> Also, it doesn't seem that we are properly transforming the device mangling number by my investigation of the code.
Can you elaborate? I don't know what you're referring to. This code is nearly identical to `SYCLUniqueStableNameExpr::ComputeName()`.
https://github.com/llvm/llvm-project/pull/133030
More information about the cfe-commits
mailing list