Teach the selector to fold lo(g) into load instruction immediate fields
authorChris Lattner <sabre@nondot.org>
Thu, 17 Nov 2005 18:02:16 +0000 (18:02 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 17 Nov 2005 18:02:16 +0000 (18:02 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24396 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PowerPC/PPCISelDAGToDAG.cpp

index 7c5c808878b13a7d5340b71a0b1e801dcb8f1990..5baec745c941a6d63f14e8ee11070eb025567b5c 100644 (file)
@@ -413,6 +413,14 @@ bool PPCDAGToDAGISel::SelectAddr(SDOperand Addr, SDOperand &Op1,
         Op2 = Select(Addr.getOperand(0));
       }
       return false;
+    } else if (Addr.getOperand(1).getOpcode() == PPCISD::Lo) {
+      // Match LOAD (ADD (X, Lo(G))).
+      assert(!cast<ConstantSDNode>(Addr.getOperand(1).getOperand(1))->getValue()
+             && "Cannot handle constant offsets yet!");
+      Op1 = Addr.getOperand(1).getOperand(0);  // The global address.
+      assert(Op1.getOpcode() == ISD::TargetGlobalAddress);
+      Op2 = Select(Addr.getOperand(0));
+      return false;   // [&g+r]
     } else {
       Op1 = Select(Addr.getOperand(0));
       Op2 = Select(Addr.getOperand(1));