diff options
| author | Kalle Raiskila <kalle.raiskila@nokia.com> | 2011-03-04 12:00:11 +0000 | 
|---|---|---|
| committer | Kalle Raiskila <kalle.raiskila@nokia.com> | 2011-03-04 12:00:11 +0000 | 
| commit | 3531e9b0d947d0c49790eaab37c7f5d4fe35427d (patch) | |
| tree | e80fcb6bfa0e7a1763aac53805ed39cda20fe9e1 /llvm/lib/Target/CellSPU/SPUISelDAGToDAG.cpp | |
| parent | e15d55366375794f66f479b248ed56b1aa5be3aa (diff) | |
| download | bcm5719-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.cpp | 7 | 
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: | 

