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(