From add05a8d958a73874a0e7c48a1538837fc598e06 Mon Sep 17 00:00:00 2001 From: Yaxun Liu Date: Thu, 1 Sep 2016 18:46:49 +0000 Subject: 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 --- llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp | 8 +++++++- llvm/lib/Target/AMDGPU/AMDGPURuntimeMetadata.h | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'llvm/lib/Target/AMDGPU') diff --git a/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp b/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp index c0ecae849bd..176708951d0 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp @@ -886,13 +886,19 @@ void AMDGPUAsmPrinter::emitRuntimeMetadata(const Function &F) { 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(T)) { + auto ET = PT->getElementType(); + if (ET->isSized()) + emitRuntimeMDIntValue(*OutStreamer, RuntimeMD::KeyArgPointeeAlign, + DL.getABITypeAlignment(ET), 4); + } // Emit KeyArgTypeName. auto TypeName = dyn_cast(F.getMetadata( diff --git a/llvm/lib/Target/AMDGPU/AMDGPURuntimeMetadata.h b/llvm/lib/Target/AMDGPU/AMDGPURuntimeMetadata.h index ed0e77c48be..9050b442b3b 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPURuntimeMetadata.h +++ b/llvm/lib/Target/AMDGPU/AMDGPURuntimeMetadata.h @@ -84,6 +84,7 @@ namespace RuntimeMD { KeyFlatWorkGroupSizeLimits = 29, // Flat work group size limits KeyMaxWorkGroupSize = 30, // Maximum work group size KeyNoPartialWorkGroups = 31, // No partial work groups + KeyArgPointeeAlign = 32, // Alignment of pointee type }; enum Language : uint8_t { -- cgit v1.2.3