From 5bb0d4b524cc9366f3a3a549165c35067d467eaf Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Mon, 23 Sep 2024 15:57:23 +0200 Subject: Narrow parameter of logand/immediate if no bits used * module/language/cps/specialize-numbers.scm (specialize-operations): Narrow ulogand/immediate param according to used bits. Origin: upstream, commit 5e6288c9304b60f1875a44808ee3858e3d6efc83 --- module/language/cps/specialize-numbers.scm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/module/language/cps/specialize-numbers.scm b/module/language/cps/specialize-numbers.scm index 4ec88871c..f93250756 100644 --- a/module/language/cps/specialize-numbers.scm +++ b/module/language/cps/specialize-numbers.scm @@ -1,6 +1,6 @@ ;;; Continuation-passing style (CPS) intermediate language (IL) -;; Copyright (C) 2015-2021, 2023 Free Software Foundation, Inc. +;; Copyright (C) 2015-2021,2023-2024 Free Software Foundation, Inc. ;;;; This library is free software; you can redistribute it and/or ;;;; modify it under the terms of the GNU Lesser General Public @@ -561,9 +561,11 @@ BITS indicating the significant bits needed for a variable. BITS may be (specialize-unop cps k src op param a (unbox-u64 a) (box-u64 result)))) - (('logand/immediate (? u64-result? ) param (? u64-operand? a)) + (('logand/immediate (? u64-result?) param (? u64-operand? a)) (specialize-unop cps k src 'ulogand/immediate - (logand param (1- (ash 1 64))) + (logand param + (or (intmap-ref sigbits result) -1) + (1- (ash 1 64))) a (unbox-u64 a) (box-u64 result)))