#| -*-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
(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.
(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)))
(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))