summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AMDGPU/AMDGPULowerKernelArguments.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2018-06-28 10:18:11 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2018-06-28 10:18:11 +0000
commit513e0c0ea49aebd1f809757f09f15073613b53df (patch)
tree93e76d5a075fc19357be3d447a92b5d2d2052333 /llvm/lib/Target/AMDGPU/AMDGPULowerKernelArguments.cpp
parent99e6bad8d0b405da51371d5b68e4e378cc0bcd25 (diff)
downloadbcm5719-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.cpp6
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();
OpenPOWER on IntegriCloud