add direct-call direct-callref into frontend
This commit is contained in:
parent
4088e467b3
commit
c31b471cad
1 changed files with 16 additions and 14 deletions
|
@ -1308,20 +1308,22 @@ This can run just once."
|
||||||
(subrp (subrp f))
|
(subrp (subrp f))
|
||||||
(callee-in-unit (gethash callee
|
(callee-in-unit (gethash callee
|
||||||
(comp-ctxt-funcs-h comp-ctxt))))
|
(comp-ctxt-funcs-h comp-ctxt))))
|
||||||
(when-let* ((optimize (or (and subrp
|
(if (and subrp (not (subr-native-elispp f)))
|
||||||
(not (subr-native-elispp f)))
|
(let ((call-type (if (if subrp
|
||||||
(eq callee self)
|
|
||||||
;; Attention speed 3 optimize inter compilation
|
|
||||||
;; unit calls!!
|
|
||||||
(and (>= comp-speed 3)
|
|
||||||
callee-in-unit)))
|
|
||||||
(call-type (if (if subrp
|
|
||||||
(not (numberp (cdr (subr-arity f))))
|
(not (numberp (cdr (subr-arity f))))
|
||||||
(comp-nargs-p callee-in-unit))
|
(comp-nargs-p callee-in-unit))
|
||||||
'callref
|
'callref
|
||||||
'call)))
|
'call)))
|
||||||
(comp-add-subr-to-relocs callee)
|
(comp-add-subr-to-relocs callee)
|
||||||
`(,call-type ,callee ,@args)))))
|
`(,call-type ,callee ,@args))
|
||||||
|
;; Intra compilation unit procedure call optimization.
|
||||||
|
(when (or (eq callee self)
|
||||||
|
;; Attention speed 3 triggers that for non self calls too!!
|
||||||
|
(and (>= comp-speed 3)
|
||||||
|
callee-in-unit))
|
||||||
|
(let* ((nargs (comp-nargs-p (comp-func-args callee-in-unit)))
|
||||||
|
(call-type (if nargs 'direct-callref 'direct-call)))
|
||||||
|
`(,call-type ,callee ,@args)))))))
|
||||||
|
|
||||||
(defun comp-call-optim (funcs)
|
(defun comp-call-optim (funcs)
|
||||||
"Given FUNCS try to avoid funcall trampoline usage when possible."
|
"Given FUNCS try to avoid funcall trampoline usage when possible."
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue