diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2018-06-28 10:18:11 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2018-06-28 10:18:11 +0000 |
commit | 513e0c0ea49aebd1f809757f09f15073613b53df (patch) | |
tree | 93e76d5a075fc19357be3d447a92b5d2d2052333 /llvm/lib/Target/AMDGPU/AMDGPULowerKernelArguments.cpp | |
parent | 99e6bad8d0b405da51371d5b68e4e378cc0bcd25 (diff) | |
download | bcm5719-llvm-513e0c0ea49aebd1f809757f09f15073613b53df.tar.gz bcm5719-llvm-513e0c0ea49aebd1f809757f09f15073613b53df.zip |
AMDGPU: Fix assert on aggregate type kernel arguments
Just fix the crash for now by not doing the optimization since
figuring out how to properly convert the bits for an arbitrary
struct is a pain.
Also fix a crash when there is only an empty struct argument.
llvm-svn: 335827
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPULowerKernelArguments.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPULowerKernelArguments.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPULowerKernelArguments.cpp b/llvm/lib/Target/AMDGPU/AMDGPULowerKernelArguments.cpp index e37e6bc9cb8..438d6c8ab32 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPULowerKernelArguments.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPULowerKernelArguments.cpp @@ -99,6 +99,8 @@ bool AMDGPULowerKernelArguments::runOnFunction(Function &F) { // FIXME: Alignment is broken broken with explicit arg offset.; const uint64_t TotalKernArgSize = BaseOffset + ST.getKernArgSegmentSize(F, DL.getTypeAllocSize(ArgStructTy)); + if (TotalKernArgSize == 0) + return false; CallInst *KernArgSegment = Builder.CreateIntrinsic(Intrinsic::amdgcn_kernarg_segment_ptr, nullptr, @@ -152,7 +154,7 @@ bool AMDGPULowerKernelArguments::runOnFunction(Function &F) { unsigned AdjustedAlign = MinAlign(KernArgBaseAlign, AlignDownOffset); Value *ArgPtr; - if (Size < 32) { + if (Size < 32 && !ArgTy->isAggregateType()) { // FIXME: Handle aggregate types // Since we don't have sub-dword scalar loads, avoid doing an extload by // loading earlier than the argument address, and extracting the relevant // bits. @@ -218,7 +220,7 @@ bool AMDGPULowerKernelArguments::runOnFunction(Function &F) { // TODO: Convert noalias arg to !noalias - if (Size < 32) { + if (Size < 32 && !ArgTy->isAggregateType()) { if (IsExtArg && OffsetDiff == 0) { Type *I32Ty = Builder.getInt32Ty(); bool IsSext = Arg.hasSExtAttr(); |