summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r--lisp/emacs-lisp/comp-cstr.el4
-rw-r--r--lisp/emacs-lisp/comp.el4
2 files changed, 7 insertions, 1 deletions
diff --git a/lisp/emacs-lisp/comp-cstr.el b/lisp/emacs-lisp/comp-cstr.el
index 28cffcf0661..57d93912d2f 100644
--- a/lisp/emacs-lisp/comp-cstr.el
+++ b/lisp/emacs-lisp/comp-cstr.el
@@ -154,6 +154,10 @@ Return them as multiple value."
collect cstr into positives
finally return (cl-values positives negatives)))
+(defvar comp-cstr-one (make-comp-cstr :typeset ()
+ :range '((1 . 1)))
+ "Represent the integer immediate one (1).")
+
;;; Value handling.
diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el
index 336ed39145d..6b06ac5840d 100644
--- a/lisp/emacs-lisp/comp.el
+++ b/lisp/emacs-lisp/comp.el
@@ -2651,7 +2651,9 @@ Fold the call in case."
(comp-mvar-neg lval) (comp-cstr-neg cstr))))
(cl-case f
(+ (comp-cstr-add lval args))
- (- (comp-cstr-sub lval args)))))
+ (- (comp-cstr-sub lval args))
+ (1+ (comp-cstr-add lval `(,(car args) ,comp-cstr-one)))
+ (1- (comp-cstr-sub lval `(,(car args) ,comp-cstr-one))))))
(defun comp-fwprop-insn (insn)
"Propagate within INSN."