Revert "Fix (aref vector (+ i constant)) with i negative on x86oids"
[sbcl.git] / src / compiler / generic / vm-tran.lisp
index 7984b71..c4044a3 100644 (file)
                               index offset &optional setter-p)
   (multiple-value-bind (func index-args) (extract-fun-args index '(+ -) 2)
     (destructuring-bind (x constant) index-args
-      (unless (and (constant-lvar-p constant)
-                   ;; the remaining argument must be a fixnum, otherwise we lose
-                   (csubtypep (lvar-type x) (specifier-type 'fixnum)))
-        (delay-ir1-transform :constraint)
+      (declare (ignorable x))
+      (unless (constant-lvar-p constant)
         (give-up-ir1-transform))
-      (let ((value (lvar-value constant))
-            new-offset)
+      (let ((value (lvar-value constant)))
         (unless (and (integerp value)
                      (sb!vm::foldable-constant-offset-p
                       element-size lowtag data-offset
-                      (setf new-offset (funcall func (lvar-value offset) value))))
+                      (funcall func value (lvar-value offset))))
           (give-up-ir1-transform "constant is too large for inlining"))
         (splice-fun-args index func 2)
         `(lambda (thing index off1 off2 ,@(when setter-p
                                             '(value)))
-           (declare (ignore off1 off2))
-           (,fun-name thing index ',new-offset ,@(when setter-p
-                                                   '(value))))))))
+           (,fun-name thing index (,func off2 off1) ,@(when setter-p
+                                                        '(value))))))))
 
 #!+(or x86 x86-64)
 (deftransform sb!bignum:%bignum-ref-with-offset