[Openmcl-cvs-notifications] r11713 - in /release/1.3/source/compiler: PPC/ppc2.lisp X86/x862.lisp vinsn.lisp
gb at clozure.com
gb at clozure.com
Tue Feb 10 20:24:15 EST 2009
Author: gb
Date: Tue Feb 10 20:24:14 2009
New Revision: 11713
Log:
Propagate r11711 to 1.3.
Modified:
release/1.3/source/compiler/PPC/ppc2.lisp
release/1.3/source/compiler/X86/x862.lisp
release/1.3/source/compiler/vinsn.lisp
Modified: release/1.3/source/compiler/PPC/ppc2.lisp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- release/1.3/source/compiler/PPC/ppc2.lisp (original)
+++ release/1.3/source/compiler/PPC/ppc2.lisp Tue Feb 10 20:24:14 2009
@@ -2770,25 +2770,26 @@
(same-reg (eq (hard-regspec-value pushed-reg)
(hard-regspec-value popped-reg)))
(tsp-p (vinsn-attribute-p push-vinsn :tsp)))
- (when (and tsp-p t) ; vsp case is harder.
- (let* ((pushed-reg-is-set (vinsn-sequence-sets-reg-p
- push-vinsn pop-vinsn pushed-reg))
- (popped-reg-is-set (if same-reg
- pushed-reg-is-set
- (vinsn-sequence-sets-reg-p
- push-vinsn pop-vinsn popped-reg))))
- (unless (and pushed-reg-is-set popped-reg-is-set)
- (unless same-reg
- (let* ((copy (if (eq (hard-regspec-class pushed-reg)
- hard-reg-class-fpr)
- (! copy-fpr popped-reg pushed-reg)
- (! copy-gpr popped-reg pushed-reg))))
- (remove-dll-node copy)
- (if pushed-reg-is-set
- (insert-dll-node-after copy push-vinsn)
- (insert-dll-node-before copy push-vinsn))))
- (elide-vinsn push-vinsn)
- (elide-vinsn pop-vinsn)))))))
+ (when (and tsp-p t) ; vsp case is harder.
+ (unless (vinsn-sequence-has-attribute-p push-vinsn pop-vinsn :tsp =
:discard)
+ (let* ((pushed-reg-is-set (vinsn-sequence-sets-reg-p
+ push-vinsn pop-vinsn pushed-reg))
+ (popped-reg-is-set (if same-reg
+ pushed-reg-is-set
+ (vinsn-sequence-sets-reg-p
+ push-vinsn pop-vinsn popped-reg))))
+ (unless (and pushed-reg-is-set popped-reg-is-set)
+ (unless same-reg
+ (let* ((copy (if (eq (hard-regspec-class pushed-reg)
+ hard-reg-class-fpr)
+ (! copy-fpr popped-reg pushed-reg)
+ (! copy-gpr popped-reg pushed-reg))))
+ (remove-dll-node copy)
+ (if pushed-reg-is-set
+ (insert-dll-node-after copy push-vinsn)
+ (insert-dll-node-before copy push-vinsn))))
+ (elide-vinsn push-vinsn)
+ (elide-vinsn pop-vinsn))))))))
=
=
;;; we never leave the first form pushed (the 68K compiler had some subpri=
ms that
Modified: release/1.3/source/compiler/X86/x862.lisp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- release/1.3/source/compiler/X86/x862.lisp (original)
+++ release/1.3/source/compiler/X86/x862.lisp Tue Feb 10 20:24:14 2009
@@ -3190,27 +3190,28 @@
(hard-regspec-value popped-reg)))
(csp-p (vinsn-attribute-p push-vinsn :csp)))
(when csp-p ; vsp case is harder.
- (let* ((pushed-reg-is-set (vinsn-sequence-sets-reg-p
- push-vinsn pop-vinsn pushed-reg))
- (popped-reg-is-set (if same-reg
- pushed-reg-is-set
- (vinsn-sequence-sets-reg-p
- push-vinsn pop-vinsn popped-reg))))
- (unless (and pushed-reg-is-set popped-reg-is-set)
- (unless same-reg
- (let* ((copy (if (eq (hard-regspec-class pushed-reg)
- hard-reg-class-fpr)
- (if (=3D (get-regspec-mode pushed-reg)
- hard-reg-class-fpr-mode-double)
- (! copy-double-float popped-reg pushed-reg)
- (! copy-single-float popped-reg pushed-reg))
- (! copy-gpr popped-reg pushed-reg))))
- (remove-dll-node copy)
- (if pushed-reg-is-set
- (insert-dll-node-after copy push-vinsn)
- (insert-dll-node-before copy push-vinsn))))
- (elide-vinsn push-vinsn)
- (elide-vinsn pop-vinsn)))))))
+ (unless (vinsn-sequence-has-attribute-p push-vinsn pop-vinsn :csp =
:discard)
+ (let* ((pushed-reg-is-set (vinsn-sequence-sets-reg-p
+ push-vinsn pop-vinsn pushed-reg))
+ (popped-reg-is-set (if same-reg
+ pushed-reg-is-set
+ (vinsn-sequence-sets-reg-p
+ push-vinsn pop-vinsn popped-reg))))
+ (unless (and pushed-reg-is-set popped-reg-is-set)
+ (unless same-reg
+ (let* ((copy (if (eq (hard-regspec-class pushed-reg)
+ hard-reg-class-fpr)
+ (if (=3D (get-regspec-mode pushed-reg)
+ hard-reg-class-fpr-mode-double)
+ (! copy-double-float popped-reg pushed-re=
g)
+ (! copy-single-float popped-reg pushed-re=
g))
+ (! copy-gpr popped-reg pushed-reg))))
+ (remove-dll-node copy)
+ (if pushed-reg-is-set
+ (insert-dll-node-after copy push-vinsn)
+ (insert-dll-node-before copy push-vinsn))))
+ (elide-vinsn push-vinsn)
+ (elide-vinsn pop-vinsn))))))))
=
=
;;; we never leave the first form pushed (the 68K compiler had some subpri=
ms that
Modified: release/1.3/source/compiler/vinsn.lisp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- release/1.3/source/compiler/vinsn.lisp (original)
+++ release/1.3/source/compiler/vinsn.lisp Tue Feb 10 20:24:14 2009
@@ -490,6 +490,19 @@
(return t))))
=
=
+;;; Return T if any vinsn between START and END (exclusive) has all
+;;; attributes set in MASK set.
+(defun %vinsn-sequence-has-attribute-p (start end attr)
+ (do* ((element (vinsn-succ start) (vinsn-succ element)))
+ ((eq element end))
+ (when (typep element 'vinsn)
+ (when (eql attr (logand (vinsn-template-attributes (vinsn-template e=
lement))))
+ (return t)))))
+
+(defmacro vinsn-sequence-has-attribute-p (start end &rest attrs)
+ `(%vinsn-sequence-has-attribute-p ,start ,end ,(encode-vinsn-attributes =
attrs)))
+
+ =
;;; Flow-graph nodes (FGNs)
=
(defstruct (fgn (:include dll-header))
More information about the Openmcl-cvs-notifications
mailing list