Skip to content

Commit 035fb09

Browse files
authored
[SYCL][NFC] Helper for implicit kernarg targets in LowerWGLocalMemory (#16766)
To make the code more explicit and allow for future expansion.
1 parent 0b3f4e7 commit 035fb09

File tree

1 file changed

+18
-13
lines changed

1 file changed

+18
-13
lines changed

llvm/lib/SYCLLowerIR/LowerWGLocalMemory.cpp

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,16 @@ class SYCLLowerWGLocalMemoryLegacy : public ModulePass {
4949
};
5050
} // namespace
5151

52+
static bool usesKernelArgForDynWGLocalMem(const Triple &TT) {
53+
return TT.isSPIROrSPIRV();
54+
}
55+
5256
std::vector<std::pair<StringRef, int>>
5357
sycl::getKernelNamesUsingImplicitLocalMem(const Module &M) {
5458
std::vector<std::pair<StringRef, int>> SPIRKernelNames;
5559
Triple TT(M.getTargetTriple());
5660

57-
if (TT.isSPIROrSPIRV()) {
61+
if (usesKernelArgForDynWGLocalMem(TT)) {
5862
auto GetArgumentPos = [&](const Function &F) -> int {
5963
for (const Argument &Arg : F.args())
6064
if (F.getAttributes().hasParamAttr(Arg.getArgNo(),
@@ -129,7 +133,7 @@ lowerDynamicLocalMemCallDirect(CallInst *CI, Triple TT,
129133

130134
Value *GVPtr = [&]() -> Value * {
131135
IRBuilder<> Builder(CI);
132-
if (TT.isSPIROrSPIRV())
136+
if (usesKernelArgForDynWGLocalMem(TT))
133137
return Builder.CreateLoad(CI->getType(), LocalMemPlaceholder);
134138

135139
return Builder.CreatePointerCast(LocalMemPlaceholder, CI->getType());
@@ -188,32 +192,33 @@ static bool dynamicWGLocalMemory(Module &M) {
188192
if (!LocalMemArrayGV) {
189193
assert(DLMFunc->isDeclaration() && "should have declaration only");
190194
Type *LocalMemArrayTy =
191-
TT.isSPIROrSPIRV()
195+
usesKernelArgForDynWGLocalMem(TT)
192196
? static_cast<Type *>(PointerType::get(M.getContext(), LocalAS))
193197
: static_cast<Type *>(
194198
ArrayType::get(Type::getInt8Ty(M.getContext()), 0));
195199
LocalMemArrayGV = new GlobalVariable(
196200
M, // module
197201
LocalMemArrayTy, // type
198202
false, // isConstant
199-
TT.isSPIROrSPIRV() ? GlobalValue::LinkOnceODRLinkage
200-
: GlobalValue::ExternalLinkage, // Linkage
201-
TT.isSPIROrSPIRV() ? UndefValue::get(LocalMemArrayTy)
202-
: nullptr, // Initializer
203-
DYNAMIC_LOCALMEM_GV, // Name prefix
204-
nullptr, // InsertBefore
205-
GlobalVariable::NotThreadLocal, // ThreadLocalMode
206-
LocalAS // AddressSpace
203+
usesKernelArgForDynWGLocalMem(TT)
204+
? GlobalValue::LinkOnceODRLinkage
205+
: GlobalValue::ExternalLinkage, // Linkage
206+
usesKernelArgForDynWGLocalMem(TT) ? UndefValue::get(LocalMemArrayTy)
207+
: nullptr, // Initializer
208+
DYNAMIC_LOCALMEM_GV, // Name prefix
209+
nullptr, // InsertBefore
210+
GlobalVariable::NotThreadLocal, // ThreadLocalMode
211+
LocalAS // AddressSpace
207212
);
208213
LocalMemArrayGV->setUnnamedAddr(GlobalVariable::UnnamedAddr::Local);
209214
constexpr int DefaultMaxAlignment = 128;
210-
if (!TT.isSPIROrSPIRV())
215+
if (!usesKernelArgForDynWGLocalMem(TT))
211216
LocalMemArrayGV->setAlignment(Align{DefaultMaxAlignment});
212217
}
213218
lowerLocalMemCall(DLMFunc, [&](CallInst *CI) {
214219
lowerDynamicLocalMemCallDirect(CI, TT, LocalMemArrayGV);
215220
});
216-
if (TT.isSPIROrSPIRV()) {
221+
if (usesKernelArgForDynWGLocalMem(TT)) {
217222
SmallVector<Function *, 4> Kernels;
218223
llvm::for_each(M.functions(), [&](Function &F) {
219224
if (F.getCallingConv() == CallingConv::SPIR_KERNEL &&

0 commit comments

Comments
 (0)