diff options
author | Evan Cheng <evan.cheng@apple.com> | 2009-01-19 18:31:51 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2009-01-19 18:31:51 +0000 |
commit | 5fc742d5b2b647b3dce2c9ba943a2499d980c347 (patch) | |
tree | acbe234f266c21853b3c8388e64e054e70ebef82 /lib | |
parent | 1999ff1d810b13425fcb80ac8bbccdff4c3a7cf8 (diff) | |
download | external_llvm-5fc742d5b2b647b3dce2c9ba943a2499d980c347.zip external_llvm-5fc742d5b2b647b3dce2c9ba943a2499d980c347.tar.gz external_llvm-5fc742d5b2b647b3dce2c9ba943a2499d980c347.tar.bz2 |
Handle ISD::DECLARE with PIC relocation model.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62516 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Target/PowerPC/PPCISelDAGToDAG.cpp | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/lib/Target/PowerPC/PPCISelDAGToDAG.cpp b/lib/Target/PowerPC/PPCISelDAGToDAG.cpp index 276abe7..c43acdb 100644 --- a/lib/Target/PowerPC/PPCISelDAGToDAG.cpp +++ b/lib/Target/PowerPC/PPCISelDAGToDAG.cpp @@ -1107,10 +1107,21 @@ SDNode *PPCDAGToDAGISel::Select(SDValue Op) { FrameIndexSDNode *FINode = dyn_cast<FrameIndexSDNode>(N1); if (!FINode) break; - if (N2.getOpcode() == ISD::ADD && - N2.getOperand(0).getOpcode() == PPCISD::Hi && - N2.getOperand(1).getOpcode() == PPCISD::Lo) - N2 = N2.getOperand(0).getOperand(0); + if (N2.getOpcode() == ISD::ADD) { + if (N2.getOperand(0).getOpcode() == ISD::ADD && + N2.getOperand(0).getOperand(0).getOpcode() == PPCISD::GlobalBaseReg && + N2.getOperand(0).getOperand(1).getOpcode() == PPCISD::Hi && + N2.getOperand(1).getOpcode() == PPCISD::Lo) + N2 = N2.getOperand(0).getOperand(1).getOperand(0); + else if (N2.getOperand(0).getOpcode() == ISD::ADD && + N2.getOperand(0).getOperand(0).getOpcode() == PPCISD::GlobalBaseReg && + N2.getOperand(0).getOperand(1).getOpcode() == PPCISD::Lo && + N2.getOperand(1).getOpcode() == PPCISD::Hi) + N2 = N2.getOperand(0).getOperand(1).getOperand(0); + else if (N2.getOperand(0).getOpcode() == PPCISD::Hi && + N2.getOperand(1).getOpcode() == PPCISD::Lo) + N2 = N2.getOperand(0).getOperand(0); + } if (!isa<GlobalAddressSDNode>(N2)) break; int FI = cast<FrameIndexSDNode>(N1)->getIndex(); |