diff --git a/lib/CodeGen/SelectionDAG/FastISel.cpp b/lib/CodeGen/SelectionDAG/FastISel.cpp
index b4271fe..71042ff 100644
--- a/lib/CodeGen/SelectionDAG/FastISel.cpp
+++ b/lib/CodeGen/SelectionDAG/FastISel.cpp
@@ -74,7 +74,7 @@
     return false;
 
   const Type *Ty = I->getOperand(0)->getType();
-  MVT VT = MVT::getMVT(Ty, /*HandleUnknown=*/false);
+  MVT::SimpleValueType VT = TLI.getPointerTy().getSimpleVT();
   for (GetElementPtrInst::op_iterator OI = I->op_begin()+1, E = I->op_end();
        OI != E; ++OI) {
     Value *Idx = *OI;
@@ -85,7 +85,7 @@
         uint64_t Offs = TD.getStructLayout(StTy)->getElementOffset(Field);
         // FIXME: This can be optimized by combining the add with a
         // subsequent one.
-        N = FastEmit_ri_(VT.getSimpleVT(), ISD::ADD, N, Offs, VT.getSimpleVT());
+        N = FastEmit_ri_(VT, ISD::ADD, N, Offs, VT);
         if (N == 0)
           // Unhandled operand. Halt "fast" selection and bail.
           return false;
@@ -99,7 +99,7 @@
         if (CI->getZExtValue() == 0) continue;
         uint64_t Offs = 
           TD.getABITypeSize(Ty)*cast<ConstantInt>(CI)->getSExtValue();
-        N = FastEmit_ri_(VT.getSimpleVT(), ISD::ADD, N, Offs, VT.getSimpleVT());
+        N = FastEmit_ri_(VT, ISD::ADD, N, Offs, VT);
         if (N == 0)
           // Unhandled operand. Halt "fast" selection and bail.
           return false;
@@ -117,21 +117,21 @@
       // it.
       MVT IdxVT = MVT::getMVT(Idx->getType(), /*HandleUnknown=*/false);
       if (IdxVT.bitsLT(VT))
-        IdxN = FastEmit_r(VT.getSimpleVT(), ISD::SIGN_EXTEND, IdxN);
+        IdxN = FastEmit_r(VT, ISD::SIGN_EXTEND, IdxN);
       else if (IdxVT.bitsGT(VT))
-        IdxN = FastEmit_r(VT.getSimpleVT(), ISD::TRUNCATE, IdxN);
+        IdxN = FastEmit_r(VT, ISD::TRUNCATE, IdxN);
       if (IdxN == 0)
         // Unhandled operand. Halt "fast" selection and bail.
         return false;
 
       // FIXME: If multiple is power of two, turn it into a shift. The
       // optimization should be in FastEmit_ri?
-      IdxN = FastEmit_ri_(VT.getSimpleVT(), ISD::MUL, IdxN,
-                          ElementSize, VT.getSimpleVT());
+      IdxN = FastEmit_ri_(VT, ISD::MUL, IdxN,
+                          ElementSize, VT);
       if (IdxN == 0)
         // Unhandled operand. Halt "fast" selection and bail.
         return false;
-      N = FastEmit_rr(VT.getSimpleVT(), ISD::ADD, N, IdxN);
+      N = FastEmit_rr(VT, ISD::ADD, N, IdxN);
       if (N == 0)
         // Unhandled operand. Halt "fast" selection and bail.
         return false;
diff --git a/test/CodeGen/X86/fast-isel.ll b/test/CodeGen/X86/fast-isel.ll
index ba7e861..f74e97e 100644
--- a/test/CodeGen/X86/fast-isel.ll
+++ b/test/CodeGen/X86/fast-isel.ll
@@ -3,10 +3,11 @@
 
 ; This tests very minimal fast-isel functionality.
 
-define i32 @foo(i32* %p, i32* %q) {
+define i32* @foo(i32* %p, i32* %q, i32** %z) {
 entry:
   %r = load i32* %p
   %s = load i32* %q
+  %y = load i32** %z
   br label %fast
 
 fast:
@@ -17,10 +18,12 @@
   %t4 = or i32 %t3, %s
   %t5 = xor i32 %t4, %s
   %t6 = add i32 %t5, 2
+  %t7 = getelementptr i32* %y, i32 1
+  %t8 = getelementptr i32* %t7, i32 %t6
   br label %exit
 
 exit:
-  ret i32 %t6
+  ret i32* %t8
 }
 
 define double @bar(double* %p, double* %q) {
