[PATCH] D119247: [NVPTX] Use align attribute for kernel pointer arg alignment
Nikita Popov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 10 02:57:06 PST 2022
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG1c729d719a34: [NVPTX] Use align attribute for kernel pointer arg alignment (authored by nikic).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D119247/new/
https://reviews.llvm.org/D119247
Files:
llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
llvm/test/CodeGen/NVPTX/nvcl-param-align.ll
Index: llvm/test/CodeGen/NVPTX/nvcl-param-align.ll
===================================================================
--- llvm/test/CodeGen/NVPTX/nvcl-param-align.ll
+++ llvm/test/CodeGen/NVPTX/nvcl-param-align.ll
@@ -2,15 +2,15 @@
target triple = "nvptx-unknown-nvcl"
+define void @foo(i64 %img, i64 %sampler, <5 x float>* align 32 %v1, i32* %v2) {
+; The parameter alignment is determined by the align attribute (default 1).
; CHECK-LABEL: .entry foo(
-define void @foo(i64 %img, i64 %sampler, <5 x float>* %v) {
-; The parameter alignment should be the next power of 2 of 5xsizeof(float),
-; which is 32.
; CHECK: .param .u32 .ptr .align 32 foo_param_2
+; CHECK: .param .u32 .ptr .align 1 foo_param_3
ret void
}
!nvvm.annotations = !{!1, !2, !3}
-!1 = !{void (i64, i64, <5 x float>*)* @foo, !"kernel", i32 1}
-!2 = !{void (i64, i64, <5 x float>*)* @foo, !"rdoimage", i32 0}
-!3 = !{void (i64, i64, <5 x float>*)* @foo, !"sampler", i32 1}
+!1 = !{void (i64, i64, <5 x float>*, i32*)* @foo, !"kernel", i32 1}
+!2 = !{void (i64, i64, <5 x float>*, i32*)* @foo, !"rdoimage", i32 0}
+!3 = !{void (i64, i64, <5 x float>*, i32*)* @foo, !"sampler", i32 1}
Index: llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
===================================================================
--- llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
+++ llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
@@ -1335,34 +1335,6 @@
}
}
-static unsigned int getOpenCLAlignment(const DataLayout &DL, Type *Ty) {
- if (Ty->isSingleValueType())
- return DL.getPrefTypeAlignment(Ty);
-
- auto *ATy = dyn_cast<ArrayType>(Ty);
- if (ATy)
- return getOpenCLAlignment(DL, ATy->getElementType());
-
- auto *STy = dyn_cast<StructType>(Ty);
- if (STy) {
- unsigned int alignStruct = 1;
- // Go through each element of the struct and find the
- // largest alignment.
- for (unsigned i = 0, e = STy->getNumElements(); i != e; i++) {
- Type *ETy = STy->getElementType(i);
- unsigned int align = getOpenCLAlignment(DL, ETy);
- if (align > alignStruct)
- alignStruct = align;
- }
- return alignStruct;
- }
-
- auto *FTy = dyn_cast<FunctionType>(Ty);
- if (FTy)
- return DL.getPointerPrefAlignment().value();
- return DL.getPrefTypeAlignment(Ty);
-}
-
void NVPTXAsmPrinter::printParamName(Function::const_arg_iterator I,
int paramIndex, raw_ostream &O) {
getSymbol(I->getParent())->print(O, MAI);
@@ -1454,7 +1426,6 @@
if (static_cast<NVPTXTargetMachine &>(TM).getDrvInterface() !=
NVPTX::CUDA) {
- Type *ETy = PTy->getPointerElementType();
int addrSpace = PTy->getAddressSpace();
switch (addrSpace) {
default:
@@ -1470,7 +1441,8 @@
O << ".ptr .global ";
break;
}
- O << ".align " << (int)getOpenCLAlignment(DL, ETy) << " ";
+ Align ParamAlign = I->getParamAlign().valueOrOne();
+ O << ".align " << ParamAlign.value() << " ";
}
printParamName(I, paramIndex, O);
continue;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D119247.407450.patch
Type: text/x-patch
Size: 3113 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220210/bfd9c3db/attachment.bin>
More information about the llvm-commits
mailing list