[llvm-commits] CVS: llvm/lib/Target/PowerPC/PPC32ISelDAGToDAG.cpp

Chris Lattner lattner at cs.uiuc.edu
Wed Aug 24 17:45:55 PDT 2005



Changes in directory llvm/lib/Target/PowerPC:

PPC32ISelDAGToDAG.cpp updated: 1.26 -> 1.27
---
Log message:

Fully implement frame index, so that we can pass the address of alloca's
around to functions and stuff


---
Diffs of the changes:  (+12 -4)

 PPC32ISelDAGToDAG.cpp |   16 ++++++++++++----
 1 files changed, 12 insertions(+), 4 deletions(-)


Index: llvm/lib/Target/PowerPC/PPC32ISelDAGToDAG.cpp
diff -u llvm/lib/Target/PowerPC/PPC32ISelDAGToDAG.cpp:1.26 llvm/lib/Target/PowerPC/PPC32ISelDAGToDAG.cpp:1.27
--- llvm/lib/Target/PowerPC/PPC32ISelDAGToDAG.cpp:1.26	Wed Aug 24 19:29:58 2005
+++ llvm/lib/Target/PowerPC/PPC32ISelDAGToDAG.cpp	Wed Aug 24 19:45:43 2005
@@ -369,9 +369,10 @@
   if (Addr.getOpcode() == ISD::ADD) {
     if (isIntImmediate(Addr.getOperand(1), imm) && isInt16(imm)) {
       Op1 = getI32Imm(Lo16(imm));
-      if (isa<FrameIndexSDNode>(Addr.getOperand(0))) {
+      if (FrameIndexSDNode *FI =
+            dyn_cast<FrameIndexSDNode>(Addr.getOperand(0))) {
         ++FrameOff;
-        Op2 = Addr.getOperand(0);
+        Op2 = CurDAG->getTargetFrameIndex(FI->getIndex(), MVT::i32);
       } else {
         Op2 = Select(Addr.getOperand(0));
       }
@@ -396,9 +397,9 @@
         Op2 = CurDAG->getTargetNode(PPC::LIS, MVT::i32, Op1);
       return false;
     }
-  } else if (isa<FrameIndexSDNode>(Addr)) {
+  } else if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Addr)) {
     Op1 = getI32Imm(0);
-    Op2 = Addr;
+    Op2 = CurDAG->getTargetFrameIndex(FI->getIndex(), MVT::i32);
     return false;
   } else if (ConstantPoolSDNode *CP = dyn_cast<ConstantPoolSDNode>(Addr)) {
     Op1 = Addr;
@@ -530,6 +531,13 @@
     else
       CurDAG->SelectNodeTo(N, N->getValueType(0), PPC::IMPLICIT_DEF_FP);
     break;
+  case ISD::FrameIndex: {
+    int FI = cast<FrameIndexSDNode>(N)->getIndex();
+    CurDAG->SelectNodeTo(N, MVT::i32, PPC::ADDI,
+                         CurDAG->getTargetFrameIndex(FI, MVT::i32),
+                         getI32Imm(0));
+    break;
+  }
   case ISD::GlobalAddress: {
     GlobalValue *GV = cast<GlobalAddressSDNode>(N)->getGlobal();
     SDOperand Tmp;






More information about the llvm-commits mailing list