public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r14-6418] expr: catch more `a*bool` while expanding [PR 112935]
@ 2023-12-11 15:56 Andrew Pinski
  0 siblings, 0 replies; only message in thread
From: Andrew Pinski @ 2023-12-11 15:56 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:acbfb8b9495b802e414e6ab94b810ef7b0c8aa1d

commit r14-6418-gacbfb8b9495b802e414e6ab94b810ef7b0c8aa1d
Author: Andrew Pinski <quic_apinski@quicinc.com>
Date:   Sat Dec 9 13:43:23 2023 -0800

    expr: catch more `a*bool` while expanding  [PR 112935]
    
    After r14-1655-g52c92fb3f40050 (and the other commits
    which touch zero_one_valued_p), we end up with a with
    `bool * a` but where the bool is an SSA name that might not
    have non-zero bits set on it (to 0x1) even though it
    does the non-zero bits would be 0x1.
    The case of coremarks, it is only phiopt4 which adds the new
    ssa name and nothing afterwards updates the nonzero bits on it.
    This fixes the regression by using gimple_zero_one_valued_p
    rather than tree_nonzero_bits to match the cases where the
    SSA_NAME didn't have the non-zero bits set.
    gimple_zero_one_valued_p handles one level of cast and also
    and an `&`.
    
    Bootstrapped and tested on x86_64-linux-gnu.
    
    gcc/ChangeLog:
    
            PR middle-end/112935
            * expr.cc (expand_expr_real_2): Use
            gimple_zero_one_valued_p instead of tree_nonzero_bits
            to find boolean defined expressions.
    
    Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>

Diff:
---
 gcc/expr.cc | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/gcc/expr.cc b/gcc/expr.cc
index 6da51f2aca2..4686cacd22f 100644
--- a/gcc/expr.cc
+++ b/gcc/expr.cc
@@ -10209,8 +10209,9 @@ expand_expr_real_2 (sepops ops, rtx target, machine_mode tmode,
       /* Expand X*Y as X&-Y when Y must be zero or one.  */
       if (SCALAR_INT_MODE_P (mode))
 	{
-	  bool bit0_p = tree_nonzero_bits (treeop0) == 1;
-	  bool bit1_p = tree_nonzero_bits (treeop1) == 1;
+	  bool gimple_zero_one_valued_p (tree, tree (*)(tree));
+	  bool bit0_p = gimple_zero_one_valued_p (treeop0, nullptr);
+	  bool bit1_p = gimple_zero_one_valued_p (treeop1, nullptr);
 
 	  /* Expand X*Y as X&Y when both X and Y must be zero or one.  */
 	  if (bit0_p && bit1_p)

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-12-11 15:56 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-12-11 15:56 [gcc r14-6418] expr: catch more `a*bool` while expanding [PR 112935] Andrew Pinski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).