[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
feature/native-comp 489a79d 6/6: * Mitigate possible speed 3 miss-optimi
From: |
Andrea Corallo |
Subject: |
feature/native-comp 489a79d 6/6: * Mitigate possible speed 3 miss-optimization |
Date: |
Sat, 6 Jun 2020 17:38:10 -0400 (EDT) |
branch: feature/native-comp
commit 489a79de96c7f90271e57b86b8162ef7ba500fed
Author: Andrea Corallo <akrl@sdf.org>
Commit: Andrea Corallo <akrl@sdf.org>
* Mitigate possible speed 3 miss-optimization
Do not perform trampoline optimization at speed 3 on function if their
name is not unique inside the compilation unit. Note that the
function can still be redefined in any other way therefore this is a
mitigation.
* lisp/emacs-lisp/comp.el (comp-func-unique-in-cu-p): New
predicate.
(comp-call-optim-form-call): Perform trampoline optimization
for named functions only if they are unique within the current
compilation unit.
---
lisp/emacs-lisp/comp.el | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el
index f30409a..b8ab48a 100644
--- a/lisp/emacs-lisp/comp.el
+++ b/lisp/emacs-lisp/comp.el
@@ -399,6 +399,18 @@ structure.")
"Type hint predicate for function name FUNC."
(when (memq func comp-type-hints) t))
+(defun comp-func-unique-in-cu-p (func)
+ "Return t if FUNC is know to be unique in the current compilation unit."
+ (if (symbolp func)
+ (cl-loop with h = (make-hash-table :test #'eq)
+ for f being the hash-value in (comp-ctxt-funcs-h comp-ctxt)
+ for name = (comp-func-name f)
+ when (gethash name h)
+ return nil
+ do (puthash name t h)
+ finally return t)
+ t))
+
(defsubst comp-alloc-class-to-container (alloc-class)
"Given ALLOC-CLASS return the data container for the current context.
Assume allocaiton class 'd-default as default."
@@ -2018,7 +2030,8 @@ FUNCTION can be a function-name or byte compiled
function."
;; Intra compilation unit procedure call optimization.
;; Attention speed 3 triggers this for non self calls too!!
((and comp-func-callee
- (or (>= comp-speed 3)
+ (or (and (>= comp-speed 3)
+ (comp-func-unique-in-cu-p callee))
(and (>= comp-speed 2)
;; Anonymous lambdas can't be redefined so are
;; always safe to optimize.
- feature/native-comp updated (385d9e6 -> 489a79d), Andrea Corallo, 2020/06/06
- feature/native-comp e38678b 2/6: Reduce the number of files probed when finding a lisp file., Andrea Corallo, 2020/06/06
- feature/native-comp ee3df14 1/6: Merge remote-tracking branch 'savannah/master' into HEAD, Andrea Corallo, 2020/06/06
- feature/native-comp dcfcbb1 5/6: * Allow for optimizing anonymous lambdas in call-optim, Andrea Corallo, 2020/06/06
- feature/native-comp e8ab017 3/6: Change 'direct-call' 'direct-callref' LIMPLE ops sematinc, Andrea Corallo, 2020/06/06
- feature/native-comp 6449a05 4/6: * Clean-up unnecessary lisp_X context definition, Andrea Corallo, 2020/06/06
- feature/native-comp 489a79d 6/6: * Mitigate possible speed 3 miss-optimization,
Andrea Corallo <=