Unbreak DECLARE isel in pic mode.
authorEvan Cheng <evan.cheng@apple.com>
Wed, 18 Jun 2008 02:48:27 +0000 (02:48 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Wed, 18 Jun 2008 02:48:27 +0000 (02:48 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52439 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86ISelDAGToDAG.cpp

index e0b8e0129567b6e914dbb4504188927ed26972dc..3a4496f002557785552e7c623630fa341a747027 100644 (file)
@@ -1585,10 +1585,14 @@ SDNode *X86DAGToDAGISel::Select(SDOperand N) {
       SDOperand Chain = Node->getOperand(0);
       SDOperand N1 = Node->getOperand(1);
       SDOperand N2 = Node->getOperand(2);
-      if (isa<FrameIndexSDNode>(N1) &&
-          N2.getOpcode() == X86ISD::Wrapper &&
+      if (!isa<FrameIndexSDNode>(N1))
+        break;
+      int FI = cast<FrameIndexSDNode>(N1)->getIndex();
+      if (N2.getOpcode() == ISD::ADD &&
+          N2.getOperand(0).getOpcode() == X86ISD::GlobalBaseReg)
+        N2 = N2.getOperand(1);
+      if (N2.getOpcode() == X86ISD::Wrapper &&
           isa<GlobalAddressSDNode>(N2.getOperand(0))) {
-        int FI = cast<FrameIndexSDNode>(N1)->getIndex();
         GlobalValue *GV =
           cast<GlobalAddressSDNode>(N2.getOperand(0))->getGlobal();
         SDOperand Tmp1 = CurDAG->getTargetFrameIndex(FI, TLI.getPointerTy());