Rather than avoiding to wrap ISD::DECLARE GV operand in X86ISD::Wrapper, simply handl...
authorEvan Cheng <evan.cheng@apple.com>
Tue, 17 Jun 2008 02:01:22 +0000 (02:01 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Tue, 17 Jun 2008 02:01:22 +0000 (02:01 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52377 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86ISelDAGToDAG.cpp
lib/Target/X86/X86ISelLowering.cpp

index 5ee91226a26a7d34c0b8035b6010c6cc7d51bb5d..e0b8e0129567b6e914dbb4504188927ed26972dc 100644 (file)
@@ -1578,6 +1578,28 @@ SDNode *X86DAGToDAGISel::Select(SDOperand N) {
       return ResNode;
       break;
     }
+
+    case ISD::DECLARE: {
+      // Handle DECLARE nodes here because the second operand may have been
+      // wrapped in X86ISD::Wrapper.
+      SDOperand Chain = Node->getOperand(0);
+      SDOperand N1 = Node->getOperand(1);
+      SDOperand N2 = Node->getOperand(2);
+      if (isa<FrameIndexSDNode>(N1) &&
+          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());
+        SDOperand Tmp2 = CurDAG->getTargetGlobalAddress(GV, TLI.getPointerTy());
+        AddToISelQueue(Chain);
+        SDOperand Ops[] = { Tmp1, Tmp2, Chain };
+        return CurDAG->getTargetNode(TargetInstrInfo::DECLARE,
+                                     MVT::Other, Ops, 3);
+      }
+      break;
+    }
   }
 
   SDNode *ResNode = SelectCode(N);
index 11442b5fa58b761c75cef87423c09013df5597f3..4211508225fec7a05bdee80e02ca3bf2ff24cb9f 100644 (file)
@@ -4173,9 +4173,6 @@ SDOperand
 X86TargetLowering::LowerGlobalAddress(SDOperand Op, SelectionDAG &DAG) {
   GlobalValue *GV = cast<GlobalAddressSDNode>(Op)->getGlobal();
   SDOperand Result = DAG.getTargetGlobalAddress(GV, getPointerTy());
-  // If it's a debug information descriptor, don't mess with it.
-  if (DAG.isVerifiedDebugInfoDesc(Op))
-    return Result;
   Result = DAG.getNode(X86ISD::Wrapper, getPointerTy(), Result);
   // With PIC, the address is actually $g + Offset.
   if (getTargetMachine().getRelocationModel() == Reloc::PIC_ &&