Added rule to prevent tagging of a byte with 0.
authorStephen Adams <edu/mit/csail/zurich/adams>
Thu, 16 Mar 1995 05:27:46 +0000 (05:27 +0000)
committerStephen Adams <edu/mit/csail/zurich/adams>
Thu, 16 Mar 1995 05:27:46 +0000 (05:27 +0000)
v8/src/compiler/machines/spectrum/rulrew.scm

index d87fe90f480153b5b62dd589d0898007c5a56e5c..ccdbcd816750b81f898a96fa56ea204b7bd7f136 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: rulrew.scm,v 1.1 1994/11/19 02:08:04 adams Exp $
+$Id: rulrew.scm,v 1.2 1995/03/16 05:27:46 adams Exp $
 
 Copyright (c) 1990-1993 Massachusetts Institute of Technology
 
@@ -150,8 +150,9 @@ MIT in each case. |#
        (non-pointer-object? (rtl:constant-value expression))))
 
 \f
-;;; These rules are losers because there's no abstract way to cons a
-;;; statement or a predicate without also getting some CFG structure.
+;;; These rules are losers (i.e. have no effect) because there's no
+;;; abstract way to cons a statement or a predicate without also
+;;; getting some CFG structure.
 
 (define-rule rewriting
   ;; Use register 0, always 0.
@@ -171,6 +172,18 @@ MIT in each case. |#
   (QUALIFIER (rtl:immediate-zero-constant? comparand))
   (list 'EQ-TEST source (rtl:make-machine-constant 0)))
 
+(define-rule add-pre-cse-rewriting-rule!
+  (EQ-TEST (REGISTER (? comparand register-known-fixnum-constant)) (? source))
+  (QUALIFIER
+   (fits-in-5-bits-signed? (known-fixnum-constant/fixnum-value comparand)))
+  (list `EQ-TEST comparand source))
+
+(define-rule add-pre-cse-rewriting-rule!
+  (EQ-TEST (? source) (REGISTER (? comparand register-known-fixnum-constant)))
+  (QUALIFIER
+   (fits-in-5-bits-signed? (known-fixnum-constant/fixnum-value comparand)))
+  (list `EQ-TEST comparand source))
+
 (define (rtl:immediate-zero-constant? expression)
   (cond ((rtl:constant? expression)
         (let ((value (rtl:constant-value expression)))
@@ -321,6 +334,11 @@ MIT in each case. |#
        (rtl:has-type-zero? datum)))
   datum)
 
+(define-rule add-pre-cse-rewriting-rule!
+  (CONS-NON-POINTER (MACHINE-CONSTANT 0) (? datum))
+  (QUALIFIER (rtl:has-type-zero? datum))
+  datum)
+
 (define (rtl:has-type-zero? expr)
   (or (value-class=ascii? (rtl:expression-value-class expr))
       (value-class=datum? (rtl:expression-value-class expr))