Change treatment of interpreter memory registers so that they do not
authorChris Hanson <org/chris-hanson/cph>
Thu, 31 Dec 1987 07:01:21 +0000 (07:01 +0000)
committerChris Hanson <org/chris-hanson/cph>
Thu, 31 Dec 1987 07:01:21 +0000 (07:01 +0000)
cause invalidation of random memory addresses.  No other pointers will
ever point into that address block.

v7/src/compiler/rtlopt/rcse1.scm
v7/src/compiler/rtlopt/rcse2.scm
v7/src/compiler/rtlopt/rcseep.scm

index 3190a773f235487d0b1900411466c5bb3d177a81..8cf9020b0da1f520593e66344629d92f769013bb 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlopt/rcse1.scm,v 4.3 1987/12/31 05:49:33 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlopt/rcse1.scm,v 4.4 1987/12/31 07:01:21 cph Exp $
 
 Copyright (c) 1987 Massachusetts Institute of Technology
 
@@ -166,8 +166,21 @@ MIT in each case. |#
               (stack-reference-invalidate! address)
               (if (not volatile?)
                   (insert-stack-destination! address (insert-source!))))
-             (else
+             ((interpreter-register-reference? address)
+              (let ((hash (expression-hash address)))
+                (let ((memory-invalidate!
+                       (lambda ()
+                         (hash-table-delete! hash
+                                             (hash-table-lookup hash
+                                                                address)))))
+                  (if volatile?
+                      (memory-invalidate!)
+                      (assignment-memory-insertion address
+                                                   hash
+                                                   insert-source!
+                                                   memory-invalidate!)))))
 \f
+             (else
               (let ((address (expression-canonicalize address)))
                 (rtl:set-assign-address! statement address)
                 (full-expression-hash address
@@ -195,21 +208,25 @@ MIT in each case. |#
                                      element-address-varies?))))))
                       (if (or volatile? volatile?*)
                           (memory-invalidate!)
-                          (let ((address
-                                 (find-cheapest-expression address hash
-                                                           false)))
-                            (let ((element (insert-source!)))
-                              (memory-invalidate!)
-                              (insert-memory-destination!
-                               address
-                               element
-                               (modulo (+ (symbol-hash 'ASSIGN) hash)
-                                       (hash-table-size)))))))))
+                          (assignment-memory-insertion address
+                                                       hash
+                                                       insert-source!
+                                                       memory-invalidate!)))))
                 ;; **** Kludge.  Works only because stack-pointer
                 ;; gets used in very fixed way by code generator.
                 (if (stack-push/pop? address)
                     (stack-pointer-adjust!
                      (rtl:address-number address))))))))))
+
+(define (assignment-memory-insertion address hash insert-source!
+                                    memory-invalidate!)
+  (let ((address (find-cheapest-expression address hash false)))
+    (let ((element (insert-source!)))
+      (memory-invalidate!)
+      (insert-memory-destination!
+       address
+       element
+       (modulo (+ (symbol-hash 'ASSIGN) hash) (hash-table-size))))))
 \f
 (define (trivial-action volatile? insert-source!)
   (if (not volatile?)
index 590d070b487126f715ded45495a6733e7e9322dc..7f87df56a7fa3302f40981c8732b2f0a42337aa8 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlopt/rcse2.scm,v 4.2 1987/12/30 07:13:20 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlopt/rcse2.scm,v 4.3 1987/12/31 07:01:04 cph Exp $
 
 Copyright (c) 1987 Massachusetts Institute of Technology
 
@@ -107,11 +107,10 @@ MIT in each case. |#
        (expression-address-varies? (element-expression element))))
 
 (define (expression-address-varies? expression)
-  (if (memq (rtl:expression-type expression)
-           '(OFFSET PRE-INCREMENT POST-INCREMENT))
-      (not (= regnum:regs-pointer
-             (rtl:register-number (rtl:address-register expression))))
-      (rtl:any-subexpression? expression expression-address-varies?)))
+  (and (not (interpreter-register-reference? expression))
+       (or (memq (rtl:expression-type expression)
+                '(OFFSET PRE-INCREMENT POST-INCREMENT)))
+       (rtl:any-subexpression? expression expression-address-varies?)))
 
 (define (expression-invalidate! expression)
   ;; Delete any expression which refers to this expression from the
index f4be8154528172c3a907ac82d49496e435f94266..07998d9ec436007e9ce91d2873c0a1b4b59e78f0 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlopt/rcseep.scm,v 4.1 1987/12/08 13:56:02 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlopt/rcseep.scm,v 4.2 1987/12/31 07:00:47 cph Exp $
 
 Copyright (c) 1987 Massachusetts Institute of Technology
 
@@ -73,4 +73,8 @@ MIT in each case. |#
        (if (eq? (rtl:expression-type x) (rtl:expression-type y))
            (expression-equivalent? x y false)
            (rtl:any-subexpression? x loop))))
-  (loop x))
\ No newline at end of file
+  (loop x))
+
+(define-integrable (interpreter-register-reference? expression)
+  (and (rtl:offset? expression)
+       (interpreter-regs-pointer? (rtl:offset-register expression))))
\ No newline at end of file