[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
feature/native-comp 6286945 6/6: Normalize cstrs for cache hint effectiv
From: |
Andrea Corallo |
Subject: |
feature/native-comp 6286945 6/6: Normalize cstrs for cache hint effectiveness and test stability |
Date: |
Sat, 12 Dec 2020 10:47:07 -0500 (EST) |
branch: feature/native-comp
commit 62869453961ec677323ed034465833304686a534
Author: Andrea Corallo <akrl@sdf.org>
Commit: Andrea Corallo <akrl@sdf.org>
Normalize cstrs for cache hint effectiveness and test stability
* lisp/emacs-lisp/comp-cstr.el (comp-normalize-valset)
(comp-union-valsets, comp-intersection-valsets)
(comp-normalize-typeset): New functions.
(comp-union-typesets, comp-intersect-typesets)
(comp-cstr-union-homogeneous-no-range, comp-cstr-union-1-no-mem):
Update to return normalized results.
* test/lisp/emacs-lisp/comp-cstr-tests.el
(comp-cstr-typespec-tests-alist): Normalize expected type specifiers.
---
lisp/emacs-lisp/comp-cstr.el | 57 ++++++++++++++++++++++++---------
test/lisp/emacs-lisp/comp-cstr-tests.el | 12 +++----
2 files changed, 48 insertions(+), 21 deletions(-)
diff --git a/lisp/emacs-lisp/comp-cstr.el b/lisp/emacs-lisp/comp-cstr.el
index 7a55b88..6991c93 100644
--- a/lisp/emacs-lisp/comp-cstr.el
+++ b/lisp/emacs-lisp/comp-cstr.el
@@ -142,8 +142,33 @@ Return them as multiple value."
finally (cl-return (cl-values positives negatives))))
+;;; Value handling.
+
+(defun comp-normalize-valset (valset)
+ "Sort VALSET and return it."
+ (cl-sort valset (lambda (x y)
+ ;; We might want to use `sxhash-eql' for speed but
+ ;; this is safer to keep tests stable.
+ (< (sxhash-equal x)
+ (sxhash-equal y)))))
+
+(defun comp-union-valsets (&rest valsets)
+ "Union values present into VALSETS."
+ (comp-normalize-valset (cl-reduce #'cl-union valsets)))
+
+(defun comp-intersection-valsets (&rest valsets)
+ "Union values present into VALSETS."
+ (comp-normalize-valset (cl-reduce #'cl-intersection valsets)))
+
+
;;; Type handling.
+(defun comp-normalize-typeset (typeset)
+ "Sort TYPESET and return it."
+ (cl-sort typeset (lambda (x y)
+ (string-lessp (symbol-name x)
+ (symbol-name y)))))
+
(defun comp-supertypes (type)
"Return a list of pairs (supertype . hierarchy-level) for TYPE."
(cl-loop
@@ -196,8 +221,8 @@ Return them as multiple value."
do (setf last x)
finally (when last
(push last res)))
- ;; TODO sort.
- finally (cl-return (cl-remove-duplicates res)))
+ finally (cl-return (comp-normalize-typeset
+ (cl-remove-duplicates res))))
(comp-cstr-ctxt-union-typesets-mem comp-ctxt))))
(defun comp-intersect-typesets (&rest typesets)
@@ -211,7 +236,7 @@ Return them as multiple value."
((eq st x) (list y))
((eq st y) (list x)))))
ty)
- ty)))
+ (comp-normalize-typeset ty))))
;;; Integer range handling
@@ -324,17 +349,18 @@ All SRCS constraints must be homogeneously negated or
non-negated."
;; Value propagation.
(setf (comp-cstr-valset dst)
- (cl-loop
- with values = (mapcar #'comp-cstr-valset srcs)
- ;; TODO sort.
- for v in (cl-remove-duplicates (apply #'append values)
- :test #'equal)
- ;; We propagate only values those types are not already
- ;; into typeset.
- when (cl-notany (lambda (x)
- (comp-subtype-p (type-of v) x))
- (comp-cstr-typeset dst))
- collect v))
+ (comp-normalize-valset
+ (cl-loop
+ with values = (mapcar #'comp-cstr-valset srcs)
+ ;; TODO sort.
+ for v in (cl-remove-duplicates (apply #'append values)
+ :test #'equal)
+ ;; We propagate only values those types are not already
+ ;; into typeset.
+ when (cl-notany (lambda (x)
+ (comp-subtype-p (type-of v) x))
+ (comp-cstr-typeset dst))
+ collect v)))
dst)
@@ -413,7 +439,8 @@ DST is returned."
;; Value propagation.
(cond
((and (valset pos) (valset neg)
- (equal (cl-union (valset pos) (valset neg)) (valset pos)))
+ (equal (comp-union-valsets (valset pos) (valset neg))
+ (valset pos)))
;; Pos is a superset of neg.
(give-up))
(t
diff --git a/test/lisp/emacs-lisp/comp-cstr-tests.el
b/test/lisp/emacs-lisp/comp-cstr-tests.el
index 0c1d27e..392669f 100644
--- a/test/lisp/emacs-lisp/comp-cstr-tests.el
+++ b/test/lisp/emacs-lisp/comp-cstr-tests.el
@@ -45,23 +45,23 @@
;; 2
((or string array) . array)
;; 3
- ((or symbol number) . (or symbol number))
+ ((or symbol number) . (or number symbol))
;; 4
- ((or cons atom) . (or cons atom)) ;; SBCL return T
+ ((or cons atom) . (or atom cons)) ;; SBCL return T
;; 5
((or integer number) . number)
;; 6
- ((or (or integer symbol) number) . (or symbol number))
+ ((or (or integer symbol) number) . (or number symbol))
;; 7
- ((or (or integer symbol) (or number list)) . (or list symbol number))
+ ((or (or integer symbol) (or number list)) . (or list number symbol))
;; 8
((or (or integer number) nil) . number)
;; 9
((member foo) . (member foo))
;; 10
- ((member foo bar) . (member foo bar))
+ ((member foo bar) . (member bar foo))
;; 11
- ((or (member foo) (member bar)) . (member foo bar))
+ ((or (member foo) (member bar)) . (member bar foo))
;; 12
((or (member foo) symbol) . symbol) ;; SBCL return (OR SYMBOL (MEMBER FOO))
;; 13
- feature/native-comp updated (be907b0 -> 6286945), Andrea Corallo, 2020/12/12
- feature/native-comp 725c7e1 4/6: * Enumerate type specifier tests to ease debugging, Andrea Corallo, 2020/12/12
- feature/native-comp 0474fda 1/6: Merge remote-tracking branch 'savannah/master' into HEAD, Andrea Corallo, 2020/12/12
- feature/native-comp 6286945 6/6: Normalize cstrs for cache hint effectiveness and test stability,
Andrea Corallo <=
- feature/native-comp a6295d3 5/6: * Add `comp-split-pos-neg' function, Andrea Corallo, 2020/12/12
- feature/native-comp 73b5e40 3/6: * Code rework add `comp-cstrs-homogeneous', Andrea Corallo, 2020/12/12
- feature/native-comp c39fad9 2/6: * test/src/comp-tests.el (comp-tests-bootstrap): Temp fix bootstrap test., Andrea Corallo, 2020/12/12