diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2016-12-10 00:52:50 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2016-12-10 00:52:50 +0000 |
commit | 2402b95db010e80f76804f07e0f59ffcae42fbdb (patch) | |
tree | 2ef5625e11a608d54c015628e112c4491dbfcef5 /llvm/lib | |
parent | 4bd72361935300f1699d3e49ba3304f0c7631f1a (diff) | |
download | bcm5719-llvm-2402b95db010e80f76804f07e0f59ffcae42fbdb.tar.gz bcm5719-llvm-2402b95db010e80f76804f07e0f59ffcae42fbdb.zip |
AMDGPU: Fix AMDGPUPromoteAlloca breaking addrspacecasts
The users of the addrspacecast were having their types incorrectly
changed, producing invalid bitcasts between address spaces.
llvm-svn: 289307
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp b/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp index 296a8aa9c58..baa28de7a77 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp @@ -579,6 +579,12 @@ bool AMDGPUPromoteAlloca::collectUsesWithPtrTypes( WorkList.push_back(ICmp); } + if (UseInst->getOpcode() == Instruction::AddrSpaceCast) { + // Don't collect the users of this. + WorkList.push_back(User); + continue; + } + if (!User->getType()->isPointerTy()) continue; @@ -739,7 +745,8 @@ void AMDGPUPromoteAlloca::handleAlloca(AllocaInst &I) { continue; } - // The operand's value should be corrected on its own. + // The operand's value should be corrected on its own and we don't want to + // touch the users. if (isa<AddrSpaceCastInst>(V)) continue; |