On Tue, Nov 5, 2024 at 12:10 PM Martin Jambor <mjam...@suse.cz> wrote: > > Hi, > > When looking into cases where we know an actual argument of a call is > a constant but we don't generate a singleton value-range for the jump > function, I found out that the special handling of pointer constants > does not work well for constant zero pointer values. However, the > code for other types works well for zeros, so I just added a simple > test. > > With this patch, we generate > > [prange] struct S * [0, 0] MASK 0x0 VALUE 0x0 > > instead of for example: > > [prange] struct S * [0, +INF] MASK 0xfffffffffffffff0 VALUE 0x0 > > for a zero constant passed in a call. > > Bootstrapped and tested on x86_64-linux, the whole patch series has > additionally passed LTO and profiled-LTO bootstrap on the same platform > and a bootstrap and testsuite on ppc64-linux. Aarch64-linux bootstrap > and testing is in progress. OK for master is that passes too? > > Thanks, > > Martin > > > gcc/ChangeLog: > > 2024-11-01 Martin Jambor <mjam...@suse.cz> > > * ipa-prop.cc (ipa_compute_jump_functions_for_edge): When creating > value-range jump functions from pointer type constant zero, do so > as if it was not a pointer. > --- > gcc/ipa-prop.cc | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/gcc/ipa-prop.cc b/gcc/ipa-prop.cc > index 9bd2e4bc60c..012f8a32386 100644 > --- a/gcc/ipa-prop.cc > +++ b/gcc/ipa-prop.cc > @@ -2368,7 +2368,8 @@ ipa_compute_jump_functions_for_edge (struct > ipa_func_body_info *fbi, > } > > value_range vr (TREE_TYPE (arg)); > - if (POINTER_TYPE_P (TREE_TYPE (arg))) > + if (POINTER_TYPE_P (TREE_TYPE (arg)) > + && !zerop (arg))
integer_zerop (arg) - I also think this deserves a comment. Richard. > { > bool addr_nonzero = false; > bool strict_overflow = false; > -- > 2.47.0 >