Message ID | 20230725190739.37779-3-aldyh@redhat.com |
---|---|
State | New |
Headers | show |
Series | Initialize value in bit_value_unop. | expand |
On Tue, Jul 25, 2023 at 9:08 PM Aldy Hernandez via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > bit_value_binop initializes VAL regardless of the final mask. It even > has a comment to that effect: > > /* Ensure that VAL is initialized (to any value). */ > > However, bit_value_unop, which in theory shares the same API, does not. > This causes range-ops to choke on uninitialized VALs for some inputs to > ABS. > > Instead of fixing the callers, it's cleaner to make bit_value_unop and > bit_value_binop consistent. > > OK for trunk? OK > gcc/ChangeLog: > > * tree-ssa-ccp.cc (bit_value_unop): Initialize val when appropriate. > --- > gcc/tree-ssa-ccp.cc | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/gcc/tree-ssa-ccp.cc b/gcc/tree-ssa-ccp.cc > index 73fb7c11c64..15e65f16008 100644 > --- a/gcc/tree-ssa-ccp.cc > +++ b/gcc/tree-ssa-ccp.cc > @@ -1359,7 +1359,10 @@ bit_value_unop (enum tree_code code, signop type_sgn, int type_precision, > case ABS_EXPR: > case ABSU_EXPR: > if (wi::sext (rmask, rtype_precision) == -1) > - *mask = -1; > + { > + *mask = -1; > + *val = 0; > + } > else if (wi::neg_p (rmask)) > { > /* Result is either rval or -rval. */ > @@ -1385,6 +1388,7 @@ bit_value_unop (enum tree_code code, signop type_sgn, int type_precision, > > default: > *mask = -1; > + *val = 0; > break; > } > } > -- > 2.41.0 >
diff --git a/gcc/tree-ssa-ccp.cc b/gcc/tree-ssa-ccp.cc index 73fb7c11c64..15e65f16008 100644 --- a/gcc/tree-ssa-ccp.cc +++ b/gcc/tree-ssa-ccp.cc @@ -1359,7 +1359,10 @@ bit_value_unop (enum tree_code code, signop type_sgn, int type_precision, case ABS_EXPR: case ABSU_EXPR: if (wi::sext (rmask, rtype_precision) == -1) - *mask = -1; + { + *mask = -1; + *val = 0; + } else if (wi::neg_p (rmask)) { /* Result is either rval or -rval. */ @@ -1385,6 +1388,7 @@ bit_value_unop (enum tree_code code, signop type_sgn, int type_precision, default: *mask = -1; + *val = 0; break; } }