From: Chris Lattner Date: Thu, 12 Feb 2009 17:37:15 +0000 (+0000) Subject: fix PR3538 for PPC X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=f902d246b69c972fa3e8f652b44d10abbb1f9355;p=oota-llvm.git fix PR3538 for PPC git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64383 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/PowerPC/PPCISelDAGToDAG.cpp b/lib/Target/PowerPC/PPCISelDAGToDAG.cpp index 051fa8ce0cd..baef8477e53 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(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(N2)) - break; + + // If we don't have a global address here, the debug info is mangled, just + // drop it. + if (!isa(N2)) { + ReplaceUses(Op.getValue(0), Chain); + return NULL; + } int FI = cast(N1)->getIndex(); GlobalValue *GV = cast(N2)->getGlobal(); SDValue Tmp1 = CurDAG->getTargetFrameIndex(FI, TLI.getPointerTy());