diff options
| author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2018-06-25 14:29:04 +0000 | 
|---|---|---|
| committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2018-06-25 14:29:04 +0000 | 
| commit | 73eeb42e50cdc81c0c148b399da0ef0aaf6e8731 (patch) | |
| tree | 3570ddb25838a8a3afed824bae77fe8a3f1c1646 /llvm/lib | |
| parent | 1286c535bc865d201d9b870a0fe1e7f7323bca15 (diff) | |
| download | bcm5719-llvm-73eeb42e50cdc81c0c148b399da0ef0aaf6e8731.tar.gz bcm5719-llvm-73eeb42e50cdc81c0c148b399da0ef0aaf6e8731.zip | |
AMDGPU: Respect align argument parameter
This should avoid relying on the pointee type
to get the alignment, particularly since pointee
types are supposed to be removed at some point.
Also fixes not getting the alignment for unsized types.
llvm-svn: 335478
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUHSAMetadataStreamer.cpp | 28 | ||||
| -rw-r--r-- | llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUHSAMetadataStreamer.h | 1 | 
2 files changed, 19 insertions, 10 deletions
| diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUHSAMetadataStreamer.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUHSAMetadataStreamer.cpp index 402324fe6a7..d68453bc11f 100644 --- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUHSAMetadataStreamer.cpp +++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUHSAMetadataStreamer.cpp @@ -324,13 +324,26 @@ void MetadataStreamer::emitKernelArg(const Argument &Arg) {    if (Node && ArgNo < Node->getNumOperands())      TypeQual = cast<MDString>(Node->getOperand(ArgNo))->getString(); -  emitKernelArg(Func->getParent()->getDataLayout(), Arg.getType(), -                getValueKind(Arg.getType(), TypeQual, BaseTypeName), Name, -                TypeName, BaseTypeName, AccQual, TypeQual); +  Type *Ty = Arg.getType(); +  const DataLayout &DL = Func->getParent()->getDataLayout(); + +  unsigned PointeeAlign = 0; +  if (auto PtrTy = dyn_cast<PointerType>(Ty)) { +    if (PtrTy->getAddressSpace() == AMDGPUASI.LOCAL_ADDRESS) { +      PointeeAlign = Arg.getParamAlignment(); +      if (PointeeAlign == 0) +        PointeeAlign = DL.getABITypeAlignment(PtrTy->getElementType()); +    } +  } + +  emitKernelArg(DL, Ty, getValueKind(Arg.getType(), TypeQual, BaseTypeName), +                PointeeAlign, Name, TypeName, BaseTypeName, AccQual, TypeQual);  }  void MetadataStreamer::emitKernelArg(const DataLayout &DL, Type *Ty, -                                     ValueKind ValueKind, StringRef Name, +                                     ValueKind ValueKind, +                                     unsigned PointeeAlign, +                                     StringRef Name,                                       StringRef TypeName, StringRef BaseTypeName,                                       StringRef AccQual, StringRef TypeQual) {    HSAMetadata.mKernels.back().mArgs.push_back(Kernel::Arg::Metadata()); @@ -342,12 +355,7 @@ void MetadataStreamer::emitKernelArg(const DataLayout &DL, Type *Ty,    Arg.mAlign = DL.getABITypeAlignment(Ty);    Arg.mValueKind = ValueKind;    Arg.mValueType = getValueType(Ty, BaseTypeName); - -  if (auto PtrTy = dyn_cast<PointerType>(Ty)) { -    auto ElTy = PtrTy->getElementType(); -    if (PtrTy->getAddressSpace() == AMDGPUASI.LOCAL_ADDRESS && ElTy->isSized()) -      Arg.mPointeeAlign = DL.getABITypeAlignment(ElTy); -  } +  Arg.mPointeeAlign = PointeeAlign;    if (auto PtrTy = dyn_cast<PointerType>(Ty))      Arg.mAddrSpaceQual = getAddressSpaceQualifer(PtrTy->getAddressSpace()); diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUHSAMetadataStreamer.h b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUHSAMetadataStreamer.h index dfbb5d3ccee..6209e069ecb 100644 --- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUHSAMetadataStreamer.h +++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUHSAMetadataStreamer.h @@ -68,6 +68,7 @@ private:    void emitKernelArg(const Argument &Arg);    void emitKernelArg(const DataLayout &DL, Type *Ty, ValueKind ValueKind, +                     unsigned PointeeAlign = 0,                       StringRef Name = "", StringRef TypeName = "",                       StringRef BaseTypeName = "", StringRef AccQual = "",                       StringRef TypeQual = ""); | 

