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 | 6c02498215dadcbf8b50445decc2362f3ff898a0 (patch) | |
| tree | dfda5df0020fcbf3417d5508628d4cdecf89f112 /llvm/lib | |
| parent | dab04840f0f8bfbf6eaa073962080bb7f6998772 (diff) | |
| download | bcm5719-llvm-6c02498215dadcbf8b50445decc2362f3ff898a0.tar.gz bcm5719-llvm-6c02498215dadcbf8b50445decc2362f3ff898a0.zip | |
Handle ISD::DECLARE with PIC relocation model.
llvm-svn: 62516
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp b/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp index 276abe77bf3..c43acdb5c2e 100644 --- a/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp +++ b/llvm/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(); |

