AMDGPU: Add runtime metadata for pointee alignment of argument.
Add runtime metdata for pointee alignment of pointer type kernel argument. The key is KeyArgPointeeAlign and the value is a 32 bit unsigned integer.
Differential Revision: https://reviews.llvm.org/D24145
llvm-svn: 280399
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp b/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
index c0ecae8..1767089 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
@@ -886,13 +886,19 @@
unsigned I = Arg.getArgNo();
OutStreamer->EmitIntValue(RuntimeMD::KeyArgBegin, 1);
- // Emit KeyArgSize and KeyArgAlign.
+ // Emit KeyArgSize, KeyArgAlign and KeyArgPointeeAlign.
Type *T = Arg.getType();
const DataLayout &DL = F.getParent()->getDataLayout();
emitRuntimeMDIntValue(*OutStreamer, RuntimeMD::KeyArgSize,
DL.getTypeAllocSize(T), 4);
emitRuntimeMDIntValue(*OutStreamer, RuntimeMD::KeyArgAlign,
DL.getABITypeAlignment(T), 4);
+ if (auto PT = dyn_cast<PointerType>(T)) {
+ auto ET = PT->getElementType();
+ if (ET->isSized())
+ emitRuntimeMDIntValue(*OutStreamer, RuntimeMD::KeyArgPointeeAlign,
+ DL.getABITypeAlignment(ET), 4);
+ }
// Emit KeyArgTypeName.
auto TypeName = dyn_cast<MDString>(F.getMetadata(