mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-07-17 14:40:22 +02:00
Fold (logior 0 INT) to INT
* module/language/cps/type-fold.scm (logior): Integer-valued operands to (logior 0 EXPR) should fold to EXPR.
This commit is contained in:
parent
41d470f0e9
commit
a706b7e465
1 changed files with 20 additions and 1 deletions
|
@ -1,5 +1,5 @@
|
||||||
;;; Abstract constant folding on CPS
|
;;; Abstract constant folding on CPS
|
||||||
;;; Copyright (C) 2014, 2015, 2017, 2018 Free Software Foundation, Inc.
|
;;; Copyright (C) 2014-2020 Free Software Foundation, Inc.
|
||||||
;;;
|
;;;
|
||||||
;;; This library is free software: you can redistribute it and/or modify
|
;;; This library is free software: you can redistribute it and/or modify
|
||||||
;;; it under the terms of the GNU Lesser General Public License as
|
;;; it under the terms of the GNU Lesser General Public License as
|
||||||
|
@ -427,6 +427,25 @@
|
||||||
(else
|
(else
|
||||||
(with-cps cps #f))))
|
(with-cps cps #f))))
|
||||||
|
|
||||||
|
(define-binary-primcall-reducer (logior cps k src param
|
||||||
|
arg0 type0 min0 max0
|
||||||
|
arg1 type1 min1 max1)
|
||||||
|
(cond
|
||||||
|
((type<=? (logior type0 type1) &exact-integer)
|
||||||
|
(cond
|
||||||
|
((= 0 min0 max0)
|
||||||
|
(with-cps cps
|
||||||
|
(build-term
|
||||||
|
($continue k src ($values (arg1))))))
|
||||||
|
((= 0 min1 max1)
|
||||||
|
(with-cps cps
|
||||||
|
(build-term
|
||||||
|
($continue k src ($values (arg0))))))
|
||||||
|
(else
|
||||||
|
(with-cps cps #f))))
|
||||||
|
(else
|
||||||
|
(with-cps cps #f))))
|
||||||
|
|
||||||
(define-unary-primcall-reducer (u64->scm cps k src constant arg type min max)
|
(define-unary-primcall-reducer (u64->scm cps k src constant arg type min max)
|
||||||
(cond
|
(cond
|
||||||
((<= max (target-most-positive-fixnum))
|
((<= max (target-most-positive-fixnum))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue