[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