summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2009-01-19 18:31:51 +0000
committerEvan Cheng <evan.cheng@apple.com>2009-01-19 18:31:51 +0000
commit6c02498215dadcbf8b50445decc2362f3ff898a0 (patch)
treedfda5df0020fcbf3417d5508628d4cdecf89f112 /llvm/lib
parentdab04840f0f8bfbf6eaa073962080bb7f6998772 (diff)
downloadbcm5719-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.cpp19
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();
OpenPOWER on IntegriCloud