emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 46d7d44 2/2: Strength-reduce (eq X nil) to (not X)


From: Mattias Engdegård
Subject: master 46d7d44 2/2: Strength-reduce (eq X nil) to (not X)
Date: Tue, 20 Jul 2021 13:31:26 -0400 (EDT)

branch: master
commit 46d7d44894843bf30e9bc84473195c6ab892b752
Author: Mattias Engdegård <mattiase@acm.org>
Commit: Mattias Engdegård <mattiase@acm.org>

    Strength-reduce (eq X nil) to (not X)
    
    * lisp/emacs-lisp/byte-opt.el (byte-optimize-eq): New optimisation,
    which results in better test and branch code generation where it
    applies.
---
 lisp/emacs-lisp/byte-opt.el | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el
index 2fff0bd..7ed04b3 100644
--- a/lisp/emacs-lisp/byte-opt.el
+++ b/lisp/emacs-lisp/byte-opt.el
@@ -969,6 +969,12 @@ See Info node `(elisp) Integer Basics'."
      ;; Arity errors reported elsewhere.
      form)))
 
+(defun byte-optimize-eq (form)
+  (byte-optimize-binary-predicate
+   (pcase (cdr form)
+     ((or `(,x nil) `(nil ,x)) `(not ,x))
+     (_ form))))
+
 (defun byte-optimize-member (form)
   ;; Replace `member' or `memql' with `memq' if the first arg is a symbol,
   ;; or the second arg is a list of symbols.  Same with fixnums.
@@ -1056,7 +1062,7 @@ See Info node `(elisp) Integer Basics'."
 (put 'min 'byte-optimizer #'byte-optimize-min-max)
 
 (put '=   'byte-optimizer #'byte-optimize-binary-predicate)
-(put 'eq  'byte-optimizer #'byte-optimize-binary-predicate)
+(put 'eq  'byte-optimizer #'byte-optimize-eq)
 (put 'eql   'byte-optimizer #'byte-optimize-equal)
 (put 'equal 'byte-optimizer #'byte-optimize-equal)
 (put 'string= 'byte-optimizer #'byte-optimize-binary-predicate)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]