diff options
author | Jan Vesely <jan.vesely@rutgers.edu> | 2016-05-13 20:39:29 +0000 |
---|---|---|
committer | Jan Vesely <jan.vesely@rutgers.edu> | 2016-05-13 20:39:29 +0000 |
commit | f97de00745e0cae92d9bfd7117fef8e2a1056225 (patch) | |
tree | 3bbf9dad44ee33e5773831ba9dbcee30c8a94974 /llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp | |
parent | a1f9fdfcbcd04c41a12b59cd94008adc0bd78ee7 (diff) | |
download | bcm5719-llvm-f97de00745e0cae92d9bfd7117fef8e2a1056225.tar.gz bcm5719-llvm-f97de00745e0cae92d9bfd7117fef8e2a1056225.zip |
AMDGPU/R600: Implement memory loads from constant AS
Reviewers: tstellard
Subscribers: arsenm
Differential Revision: http://reviews.llvm.org/D19792
llvm-svn: 269479
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp b/llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp index 7bae9824de8..d8bdbd99e87 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp @@ -18,6 +18,7 @@ #include "AMDGPUSubtarget.h" #include "SIISelLowering.h" #include "SIMachineFunctionInfo.h" +#include "llvm/Analysis/ValueTracking.h" #include "llvm/CodeGen/FunctionLoweringInfo.h" #include "llvm/CodeGen/MachineFrameInfo.h" #include "llvm/CodeGen/PseudoSourceValue.h" @@ -607,10 +608,16 @@ bool AMDGPUDAGToDAGISel::isConstantLoad(const MemSDNode *N, int CbId) const { bool AMDGPUDAGToDAGISel::isGlobalLoad(const MemSDNode *N) const { if (!N->readMem()) return false; - if (N->getAddressSpace() == AMDGPUAS::CONSTANT_ADDRESS) - if (Subtarget->getGeneration() < AMDGPUSubtarget::SOUTHERN_ISLANDS || - N->getMemoryVT().bitsLT(MVT::i32)) + if (N->getAddressSpace() == AMDGPUAS::CONSTANT_ADDRESS) { + if (Subtarget->getGeneration() < AMDGPUSubtarget::SOUTHERN_ISLANDS) + return !isa<GlobalValue>( + GetUnderlyingObject(N->getMemOperand()->getValue(), + CurDAG->getDataLayout())); + + //TODO: Why do we need this? + if (N->getMemoryVT().bitsLT(MVT::i32)) return true; + } return checkType(N->getMemOperand()->getValue(), AMDGPUAS::GLOBAL_ADDRESS); } |