diff --git a/lib/CodeGen/InstrSelection/InstrForest.cpp b/lib/CodeGen/InstrSelection/InstrForest.cpp
index d460bb7..f928683 100644
--- a/lib/CodeGen/InstrSelection/InstrForest.cpp
+++ b/lib/CodeGen/InstrSelection/InstrForest.cpp
@@ -76,7 +76,7 @@
     }
   else if ((opLabel == Instruction::Load ||
 	    opLabel == Instruction::GetElementPtr) &&
-	   ((MemAccessInst*)I)->getFirstOffsetIdx() > 0)
+	   cast<MemAccessInst>(I)->hasIndices())
     {
       opLabel = opLabel + 100;		 // load/getElem with index vector
     }
diff --git a/lib/CodeGen/InstrSelection/InstrSelectionSupport.cpp b/lib/CodeGen/InstrSelection/InstrSelectionSupport.cpp
index 0a6d7d3..cb3f9a1 100644
--- a/lib/CodeGen/InstrSelection/InstrSelectionSupport.cpp
+++ b/lib/CodeGen/InstrSelection/InstrSelectionSupport.cpp
@@ -117,7 +117,7 @@
     getElemInstrNode->getInstruction();
   
   // Initialize return values from the incoming instruction
-  Value* ptrVal = getElemInst->getPtrOperand();
+  Value* ptrVal = getElemInst->getPointerOperand();
   chainIdxVec = getElemInst->getIndices(); // copies index vector values
   
   // Now chase the chain of getElementInstr instructions, if any
@@ -131,7 +131,7 @@
       const vector<ConstPoolVal*>& idxVec = getElemInst->getIndices();
       
       // Get the pointer value out of ptrChild and *prepend* its index vector
-      ptrVal = getElemInst->getPtrOperand();
+      ptrVal = getElemInst->getPointerOperand();
       chainIdxVec.insert(chainIdxVec.begin(), idxVec.begin(), idxVec.end());
       
       ptrChild = ptrChild->leftChild();
diff --git a/lib/Target/SparcV9/InstrSelection/InstrForest.cpp b/lib/Target/SparcV9/InstrSelection/InstrForest.cpp
index d460bb7..f928683 100644
--- a/lib/Target/SparcV9/InstrSelection/InstrForest.cpp
+++ b/lib/Target/SparcV9/InstrSelection/InstrForest.cpp
@@ -76,7 +76,7 @@
     }
   else if ((opLabel == Instruction::Load ||
 	    opLabel == Instruction::GetElementPtr) &&
-	   ((MemAccessInst*)I)->getFirstOffsetIdx() > 0)
+	   cast<MemAccessInst>(I)->hasIndices())
     {
       opLabel = opLabel + 100;		 // load/getElem with index vector
     }
diff --git a/lib/Target/SparcV9/InstrSelection/InstrSelectionSupport.cpp b/lib/Target/SparcV9/InstrSelection/InstrSelectionSupport.cpp
index 0a6d7d3..cb3f9a1 100644
--- a/lib/Target/SparcV9/InstrSelection/InstrSelectionSupport.cpp
+++ b/lib/Target/SparcV9/InstrSelection/InstrSelectionSupport.cpp
@@ -117,7 +117,7 @@
     getElemInstrNode->getInstruction();
   
   // Initialize return values from the incoming instruction
-  Value* ptrVal = getElemInst->getPtrOperand();
+  Value* ptrVal = getElemInst->getPointerOperand();
   chainIdxVec = getElemInst->getIndices(); // copies index vector values
   
   // Now chase the chain of getElementInstr instructions, if any
@@ -131,7 +131,7 @@
       const vector<ConstPoolVal*>& idxVec = getElemInst->getIndices();
       
       // Get the pointer value out of ptrChild and *prepend* its index vector
-      ptrVal = getElemInst->getPtrOperand();
+      ptrVal = getElemInst->getPointerOperand();
       chainIdxVec.insert(chainIdxVec.begin(), idxVec.begin(), idxVec.end());
       
       ptrChild = ptrChild->leftChild();
diff --git a/lib/Target/SparcV9/SparcV9InstrSelection.cpp b/lib/Target/SparcV9/SparcV9InstrSelection.cpp
index 4feecbb..8966db2 100644
--- a/lib/Target/SparcV9/SparcV9InstrSelection.cpp
+++ b/lib/Target/SparcV9/SparcV9InstrSelection.cpp
@@ -781,17 +781,16 @@
       // Use the pointer value and the index vector from the Mem instruction.
       // If it is an array reference, get the array offset value.
       // 
-      ptrVal = memInst->getPtrOperand();
+      ptrVal = memInst->getPointerOperand();
 
-      const Type* opType =
-        ((const PointerType*) ptrVal->getType())->getValueType();
+      const Type* opType = cast<PointerType>(ptrVal->getType())->getValueType();
       if (opType->isArrayType())
         {
           assert((memInst->getNumOperands()
-                  == (unsigned) 1 + memInst->getFirstOffsetIdx())
+                  == (unsigned) 1 + memInst->getFirstIndexOperandNumber())
                  && "Array refs must be lowered before Instruction Selection");
           
-          arrayOffsetVal = memInst->getOperand(memInst->getFirstOffsetIdx());
+          arrayOffsetVal = memInst->getOperand(memInst->getFirstIndexOperandNumber());
         }
     }
   
@@ -1835,7 +1834,7 @@
                 GetElementPtrInst* getElemInst =
                   cast<GetElementPtrInst>(subtreeRoot->getInstruction());
                 const PointerType* ptrType =
-                  (const PointerType*) getElemInst->getPtrOperand()->getType();
+                  cast<PointerType>(getElemInst->getPointerOperand()->getType());
                 if (! ptrType->getValueType()->isArrayType())
                   {// we don't need a separate instr
                     numInstr = 0;		// don't forward operand!
diff --git a/lib/Transforms/ExprTypeConvert.cpp b/lib/Transforms/ExprTypeConvert.cpp
index f8052b2..2e7c297 100644
--- a/lib/Transforms/ExprTypeConvert.cpp
+++ b/lib/Transforms/ExprTypeConvert.cpp
@@ -131,8 +131,8 @@
         if (!CPV[i]->isNullValue()) return false;
     }
 
-    if (!ExpressionConvertableToType(LI->getPtrOperand(), PointerType::get(Ty),
-                                     CTMap))
+    if (!ExpressionConvertableToType(LI->getPointerOperand(),
+                                     PointerType::get(Ty), CTMap))
       return false;
     break;                                     
   }
@@ -163,7 +163,7 @@
     // get to the right type...
     //
     vector<ConstPoolVal*> Indices = GEP->getIndices();
-    const Type *BaseType = GEP->getPtrOperand()->getType();
+    const Type *BaseType = GEP->getPointerOperand()->getType();
 
     while (Indices.size() &&
            cast<ConstPoolUInt>(Indices.back())->getValue() == 0) {
@@ -268,7 +268,7 @@
     Res = new LoadInst(ConstPoolVal::getNullConstant(PointerType::get(Ty)), 
                        Name);
     VMC.ExprMap[I] = Res;
-    Res->setOperand(0, ConvertExpressionToType(LI->getPtrOperand(),
+    Res->setOperand(0, ConvertExpressionToType(LI->getPointerOperand(),
                                                PointerType::get(Ty), VMC));
     assert(Res->getOperand(0)->getType() == PointerType::get(Ty));
     assert(Ty == Res->getType());
@@ -310,7 +310,7 @@
     // get to the right type...
     //
     vector<ConstPoolVal*> Indices = GEP->getIndices();
-    const Type *BaseType = GEP->getPtrOperand()->getType();
+    const Type *BaseType = GEP->getPointerOperand()->getType();
     const Type *PVTy = cast<PointerType>(Ty)->getValueType();
     Res = 0;
     while (Indices.size() &&
@@ -318,9 +318,9 @@
       Indices.pop_back();
       if (GetElementPtrInst::getIndexedType(BaseType, Indices, true) == PVTy) {
         if (Indices.size() == 0) {
-          Res = new CastInst(GEP->getPtrOperand(), BaseType); // NOOP
+          Res = new CastInst(GEP->getPointerOperand(), BaseType); // NOOP
         } else {
-          Res = new GetElementPtrInst(GEP->getPtrOperand(), Indices, Name);
+          Res = new GetElementPtrInst(GEP->getPointerOperand(), Indices, Name);
         }
         break;
       }
@@ -549,7 +549,7 @@
     // get to the right type...
     //
     vector<ConstPoolVal*> Indices = GEP->getIndices();
-    const Type *BaseType = GEP->getPtrOperand()->getType();
+    const Type *BaseType = GEP->getPointerOperand()->getType();
 
     while (Indices.size() &&
            cast<ConstPoolUInt>(Indices.back())->getValue() == 0) {
@@ -713,7 +713,7 @@
     // get to the right type...
     //
     vector<ConstPoolVal*> Indices = GEP->getIndices();
-    const Type *BaseType = GEP->getPtrOperand()->getType();
+    const Type *BaseType = GEP->getPointerOperand()->getType();
     const Type *PVTy = cast<PointerType>(Ty)->getValueType();
     Res = 0;
     while (Indices.size() &&
@@ -721,9 +721,9 @@
       Indices.pop_back();
       if (GetElementPtrInst::getIndexedType(BaseType, Indices, true) == PVTy) {
         if (Indices.size() == 0) {
-          Res = new CastInst(GEP->getPtrOperand(), BaseType); // NOOP
+          Res = new CastInst(GEP->getPointerOperand(), BaseType); // NOOP
         } else {
-          Res = new GetElementPtrInst(GEP->getPtrOperand(), Indices, Name);
+          Res = new GetElementPtrInst(GEP->getPointerOperand(), Indices, Name);
         }
         break;
       }
diff --git a/lib/Transforms/Instrumentation/TraceValues.cpp b/lib/Transforms/Instrumentation/TraceValues.cpp
index 06c8438..e8598b9 100644
--- a/lib/Transforms/Instrumentation/TraceValues.cpp
+++ b/lib/Transforms/Instrumentation/TraceValues.cpp
@@ -310,7 +310,7 @@
                BasicBlock *bb,
                BasicBlock::iterator &BBI)
 {
-  LoadInst* loadInst = new LoadInst(storeInst->getPtrOperand(),
+  LoadInst* loadInst = new LoadInst(storeInst->getPointerOperand(),
                                     storeInst->getIndices());
   BBI = bb->getInstList().insert(BBI, loadInst) + 1;
   return loadInst;
diff --git a/lib/Transforms/LevelRaise.cpp b/lib/Transforms/LevelRaise.cpp
index dfe92ee..78bb2eb 100644
--- a/lib/Transforms/LevelRaise.cpp
+++ b/lib/Transforms/LevelRaise.cpp
@@ -630,7 +630,7 @@
 
   } else if (StoreInst *SI = dyn_cast<StoreInst>(I)) {
     Value *Val     = SI->getOperand(0);
-    Value *Pointer = SI->getPtrOperand();
+    Value *Pointer = SI->getPointerOperand();
     
     // Peephole optimize the following instructions:
     // %t1 = getelementptr {<...>} * %StructPtr, <element indices>
@@ -648,7 +648,7 @@
 
       PRINT_PEEPHOLE2("gep-store:in", GEP, SI);
       ReplaceInstWithInst(BB->getInstList(), BI,
-                          SI = new StoreInst(Val, GEP->getPtrOperand(),
+                          SI = new StoreInst(Val, GEP->getPointerOperand(),
                                              Indices));
       PRINT_PEEPHOLE1("gep-store:out", SI);
       return true;
@@ -685,7 +685,7 @@
 
 
   } else if (LoadInst *LI = dyn_cast<LoadInst>(I)) {
-    Value *Pointer = LI->getPtrOperand();
+    Value *Pointer = LI->getPointerOperand();
     
     // Peephole optimize the following instructions:
     // %t1 = getelementptr {<...>} * %StructPtr, <element indices>
@@ -703,7 +703,7 @@
 
       PRINT_PEEPHOLE2("gep-load:in", GEP, LI);
       ReplaceInstWithInst(BB->getInstList(), BI,
-                          LI = new LoadInst(GEP->getPtrOperand(),
+                          LI = new LoadInst(GEP->getPointerOperand(),
                                             Indices));
       PRINT_PEEPHOLE1("gep-load:out", LI);
       return true;
