summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/CellSPU/SPUISelDAGToDAG.cpp
diff options
context:
space:
mode:
authorKalle Raiskila <kalle.raiskila@nokia.com>2011-03-04 12:00:11 +0000
committerKalle Raiskila <kalle.raiskila@nokia.com>2011-03-04 12:00:11 +0000
commit3531e9b0d947d0c49790eaab37c7f5d4fe35427d (patch)
treee80fcb6bfa0e7a1763aac53805ed39cda20fe9e1 /llvm/lib/Target/CellSPU/SPUISelDAGToDAG.cpp
parente15d55366375794f66f479b248ed56b1aa5be3aa (diff)
downloadbcm5719-llvm-3531e9b0d947d0c49790eaab37c7f5d4fe35427d.tar.gz
bcm5719-llvm-3531e9b0d947d0c49790eaab37c7f5d4fe35427d.zip
Allow load from constant on SPU.
A 'load <4 x i32>* null' crashes llc before this fix. llvm-svn: 126995
Diffstat (limited to 'llvm/lib/Target/CellSPU/SPUISelDAGToDAG.cpp')
-rw-r--r--llvm/lib/Target/CellSPU/SPUISelDAGToDAG.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/llvm/lib/Target/CellSPU/SPUISelDAGToDAG.cpp b/llvm/lib/Target/CellSPU/SPUISelDAGToDAG.cpp
index d2261562e72..9351ffdc0b7 100644
--- a/llvm/lib/Target/CellSPU/SPUISelDAGToDAG.cpp
+++ b/llvm/lib/Target/CellSPU/SPUISelDAGToDAG.cpp
@@ -321,12 +321,17 @@ SPUDAGToDAGISel::SelectAFormAddr(SDNode *Op, SDValue N, SDValue &Base,
// These match the addr256k operand type:
EVT OffsVT = MVT::i16;
SDValue Zero = CurDAG->getTargetConstant(0, OffsVT);
+ int64_t val;
switch (N.getOpcode()) {
case ISD::Constant:
+ val = dyn_cast<ConstantSDNode>(N.getNode())->getSExtValue();
+ Base = CurDAG->getTargetConstant( val , MVT::i32);
+ Index = Zero;
+ return true; break;
case ISD::ConstantPool:
case ISD::GlobalAddress:
- report_fatal_error("SPU SelectAFormAddr: Constant/Pool/Global not lowered.");
+ report_fatal_error("SPU SelectAFormAddr: Pool/Global not lowered.");
/*NOTREACHED*/
case ISD::TargetConstant:
OpenPOWER on IntegriCloud