diff --git a/basis/compiler/cfg/liveness/liveness.factor b/basis/compiler/cfg/liveness/liveness.factor
index 7a03a77b94..5cc9456d56 100644
--- a/basis/compiler/cfg/liveness/liveness.factor
+++ b/basis/compiler/cfg/liveness/liveness.factor
@@ -68,36 +68,40 @@ M: vreg-insn visit-insn
 
 DEFER: lookup-base-pointer
 
-GENERIC: lookup-base-pointer* ( insn -- vreg/f )
+GENERIC: lookup-base-pointer* ( vreg insn -- vreg/f )
 
-M: ##tagged>integer lookup-base-pointer* src>> ;
+M: ##tagged>integer lookup-base-pointer* nip src>> ;
 
 M: ##unbox-any-c-ptr lookup-base-pointer*
     ! If the input to unbox-any-c-ptr was an alien and not a
     ! byte array, then the derived pointer will be outside of
     ! the data heap. The GC has to handle this case and ignore
     ! it.
-    src>> ;
+    nip src>> ;
 
-M: ##copy lookup-base-pointer* src>> lookup-base-pointer ;
+M: ##copy lookup-base-pointer* nip src>> lookup-base-pointer ;
 
-M: ##add-imm lookup-base-pointer* src1>> lookup-base-pointer ;
+M: ##add-imm lookup-base-pointer* nip src1>> lookup-base-pointer ;
 
-M: ##sub-imm lookup-base-pointer* src1>> lookup-base-pointer ;
+M: ##sub-imm lookup-base-pointer* nip src1>> lookup-base-pointer ;
+
+M: ##parallel-copy lookup-base-pointer* values>> value-at ;
 
 M: ##add lookup-base-pointer*
     ! If both operands have a base pointer, then the user better
     ! not be doing memory reads and writes on the object, since
     ! we don't give it a base pointer in that case at all.
-    [ src1>> ] [ src2>> ] bi [ lookup-base-pointer ] bi@ xor ;
+    nip [ src1>> ] [ src2>> ] bi [ lookup-base-pointer ] bi@ xor ;
 
 M: ##sub lookup-base-pointer*
-    src1>> lookup-base-pointer ;
+    nip src1>> lookup-base-pointer ;
 
-M: vreg-insn lookup-base-pointer* drop f ;
+M: vreg-insn lookup-base-pointer* 2drop f ;
 
-: lookup-base-pointer ( vreg -- vreg/f )
-    base-pointers get [ ?leader insn-of lookup-base-pointer* ] cache ;
+: lookup-base-pointer ( vreg -- vregs/f )
+    base-pointers get [
+        dup ?leader insn-of lookup-base-pointer*
+    ] cache ;
 
 :: visit-derived-root ( vreg derived-roots gc-roots -- )
     vreg lookup-base-pointer :> base