diff options
author | Chris Lattner <sabre@nondot.org> | 2009-02-12 17:37:15 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-02-12 17:37:15 +0000 |
commit | f902d246b69c972fa3e8f652b44d10abbb1f9355 (patch) | |
tree | e0e52d8a3b6f8b2b7a685d71a05cd3f2da5ef08d /lib/Target/PowerPC | |
parent | 1823c92aa711e38577d135461fba200423114ed8 (diff) | |
download | external_llvm-f902d246b69c972fa3e8f652b44d10abbb1f9355.zip external_llvm-f902d246b69c972fa3e8f652b44d10abbb1f9355.tar.gz external_llvm-f902d246b69c972fa3e8f652b44d10abbb1f9355.tar.bz2 |
fix PR3538 for PPC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64383 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/PowerPC')
-rw-r--r-- | lib/Target/PowerPC/PPCISelDAGToDAG.cpp | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/lib/Target/PowerPC/PPCISelDAGToDAG.cpp b/lib/Target/PowerPC/PPCISelDAGToDAG.cpp index 051fa8ce..baef847 100644 --- a/lib/Target/PowerPC/PPCISelDAGToDAG.cpp +++ b/lib/Target/PowerPC/PPCISelDAGToDAG.cpp @@ -1110,8 +1110,13 @@ SDNode *PPCDAGToDAGISel::Select(SDValue Op) { SDValue N1 = N->getOperand(1); SDValue N2 = N->getOperand(2); FrameIndexSDNode *FINode = dyn_cast<FrameIndexSDNode>(N1); - if (!FINode) - break; + + // FIXME: We need to handle this for VLAs. + if (!FINode) { + ReplaceUses(Op.getValue(0), Chain); + return NULL; + } + if (N2.getOpcode() == ISD::ADD) { if (N2.getOperand(0).getOpcode() == ISD::ADD && N2.getOperand(0).getOperand(0).getOpcode() == PPCISD::GlobalBaseReg && @@ -1127,8 +1132,13 @@ SDNode *PPCDAGToDAGISel::Select(SDValue Op) { N2.getOperand(1).getOpcode() == PPCISD::Lo) N2 = N2.getOperand(0).getOperand(0); } - if (!isa<GlobalAddressSDNode>(N2)) - break; + + // If we don't have a global address here, the debug info is mangled, just + // drop it. + if (!isa<GlobalAddressSDNode>(N2)) { + ReplaceUses(Op.getValue(0), Chain); + return NULL; + } int FI = cast<FrameIndexSDNode>(N1)->getIndex(); GlobalValue *GV = cast<GlobalAddressSDNode>(N2)->getGlobal(); SDValue Tmp1 = CurDAG->getTargetFrameIndex(FI, TLI.getPointerTy()); |