Add rewrite rule for instances of byte-offset-address used for closure
authorGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Thu, 1 Jul 1993 03:30:28 +0000 (03:30 +0000)
committerGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Thu, 1 Jul 1993 03:30:28 +0000 (03:30 +0000)
bumping.

v7/src/compiler/rtlopt/rerite.scm

index 9480b0c4872d279330e280b1416f7bea1d4995f7..d7841544c057abaa3b451927ae3a2f4b5c5866c4 100644 (file)
@@ -1,8 +1,8 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlopt/rerite.scm,v 1.2 1992/02/17 21:41:52 jinx Exp $
+$Id: rerite.scm,v 1.3 1993/07/01 03:30:28 gjr Exp $
 
-Copyright (c) 1990-1992 Massachusetts Institute of Technology
+Copyright (c) 1990-1993 Massachusetts Institute of Technology
 
 This material was developed by the Scheme project at the Massachusetts
 Institute of Technology, Department of Electrical Engineering and
@@ -171,4 +171,28 @@ MIT in each case. |#
 (define-rule add-pre-cse-rewriting-rule!
   (OBJECT->ADDRESS (? source))
   (QUALIFIER (value-class=address? (rtl:expression-value-class source)))
-  source)
\ No newline at end of file
+  source)
+
+;; KLUDGE!  This is unsafe, but currently works.
+;; Probably closure bumping should not use byte-offset-address, and use
+;; a new rtl type, but...
+
+(define-rule add-pre-cse-rewriting-rule!
+  (CONS-POINTER (MACHINE-CONSTANT (? type))
+               (REGISTER (? datum register-known-value)))
+  (QUALIFIER
+   (and (= (ucode-type compiled-entry) type)
+       (rtl:byte-offset-address? datum)
+       (let ((v (let ((v (rtl:byte-offset-address-base datum)))
+                  (if (rtl:register? v)
+                      (register-known-value (rtl:register-number v))
+                      v))))
+         (and v
+              (rtl:object->address? v)))))
+  (rtl:make-byte-offset-address
+   (rtl:object->address-expression
+    (let ((v (rtl:byte-offset-address-base datum)))
+      (if (rtl:register? v)
+         (register-known-value (rtl:register-number v))
+         v)))
+   (rtl:byte-offset-address-offset datum)))
\ No newline at end of file