]> git.eshelyaron.com Git - emacs.git/commitdiff
better immediate type propagation
authorAndrea Corallo <akrl@sdf.org>
Mon, 30 Sep 2019 15:13:07 +0000 (17:13 +0200)
committerAndrea Corallo <akrl@sdf.org>
Wed, 1 Jan 2020 10:37:55 +0000 (11:37 +0100)
lisp/emacs-lisp/comp.el

index 796c130efaa52c521f6642ccfe33208382675099..9f808d2704b4cd3449066ec342428f27f099c0fd 100644 (file)
@@ -1298,16 +1298,25 @@ PRE-LAMBDA and POST-LAMBDA are called in pre or post-order if non nil."
 ;;; propagate pass specific code.
 ;; A very basic propagation pass follows.
 
+(defsubst comp-strict-type-of (obj)
+  "Given OBJ return its type understanding fixnums."
+  ;; Should be certainly smarter but now we take advantages just from fixnums.
+  (if (fixnump obj)
+      'fixnum
+    (type-of obj)))
+
 (defun comp-basic-const-propagate ()
   "Propagate simple constants for setimm operands.
 This can run just once."
-  (cl-loop for b being each hash-value of (comp-func-blocks comp-func)
-           do (cl-loop for insn in (comp-block-insns b)
-                       do (pcase insn
-                            (`(setimm ,lval ,_ ,v)
-                             (setf (comp-mvar-const-vld lval) t)
-                             (setf (comp-mvar-constant lval) v)
-                             (setf (comp-mvar-type lval) (type-of v)))))))
+  (cl-loop
+   for b being each hash-value of (comp-func-blocks comp-func)
+   do (cl-loop
+       for insn in (comp-block-insns b)
+       do (pcase insn
+            (`(setimm ,lval ,_ ,v)
+             (setf (comp-mvar-const-vld lval) t)
+             (setf (comp-mvar-constant lval) v)
+             (setf (comp-mvar-type lval) (comp-strict-type-of v)))))))
 
 (defsubst comp-mvar-propagate (lval rval)
   "Propagate into LVAL properties of RVAL."