On Thu, 10 Oct 2019 at 17:19, Aldy Hernandez <al...@redhat.com> wrote:

> It's not that particular commit, but the previous one, but yeah, that's
> all me.

Interesting, bisect really identified r276654.

I think that's what Steve reported as PR 92051 (although his backtrace is
different, but it's also for a different testcase).




> (gdb)
> #4  0x000000000145bf44 in value_range_base::lower_bound
> (this=0x7fffffffc360,
>      pair=0) at /home/cygnus/aldyh/src/gcc/gcc/tree-vrp.c:6148
> 6148      return wi::to_wide (t);
> (gdb)
> #5  0x0000000001ccb1d9 in range_operator::fold_range (
>      this=0x271edc8 <op_plus>, type=<integer_type 0x7fffefd451f8>, lh=...,
>      rh=...) at /home/cygnus/aldyh/src/gcc/gcc/range-op.cc:156
> 156             wide_int rh_lb = rh.lower_bound (y);
> (gdb)
> #6  0x000000000144b850 in range_fold_binary_expr (vr=0x7fffffffc6c0,
>      code=PLUS_EXPR, expr_type=<integer_type 0x7fffefd451f8>,
>      vr0_=0x7fffffffc480, vr1_=0x7fffffffc460)
>      at /home/cygnus/aldyh/src/gcc/gcc/tree-vrp.c:1927
> 1927                            vr1.normalize_addresses ());
> (gdb) l
> 1922      if (range_fold_binary_symbolics_p (vr, code, expr_type, &vr0,
> &vr1))
> 1923        return;
> 1924
> 1925      *vr = op->fold_range (expr_type,
> 1926                            vr0.normalize_addresses (),
> 1927                            vr1.normalize_addresses ());
> 1928    }
> 1929
> 1930    /* Perform a unary operation on a range.  */
> 1931
> (gdb) print vr1.dump()
> unsigned long [POLY_INT_CST [4, 4], POLY_INT_CST [4, 4]]$1 = void
> (gdb)
>
> We have a value_range_base containing a POLYT_INT_CST which we don't
> handle.
>
> That's rather unfortunate.  I was hoping by this point, anything we
> couldn't handle was just an address.  The previous range-ops code was
> normalizing anything not INTEGER_CST into VARYING, which I thought was a
> rather big hammer, and was trying to avoid.
>
> Interesting that the old VRP code also allowing the POLY_INT to pass on
> through all the way into extract_range_binary_expr, only to bail when it
> see's it's not an INTEGER_CST:
>
>            && (TREE_CODE (max_op0) == INTEGER_CST
>                || (sym_max_op0
>                    = get_single_symbol (max_op0, &neg_max_op0, &max_op0)))
>            && (TREE_CODE (max_op1) == INTEGER_CST
>                || (sym_max_op1
>                    = get_single_symbol (max_op1, &neg_max_op1, &max_op1)))
>
> I guess we could bring out the big hammer again if normalize_addresses
> doesn't give us an INTEGER_CST.
>
> I'll take a look at this.  Thanks for pointing it out.
>
> Thanks,

Christophe


> Aldy
>
> On 10/10/19 5:25 AM, Christophe Lyon wrote:
> >
> >
> > On Mon, 7 Oct 2019 at 13:53, Aldy Hernandez <al...@redhat.com
> > <mailto:al...@redhat.com>> wrote:
> >
> >
> >      > +bool
> >      > +ipa_vr::nonzero_p (tree expr_type) const
> >      > +{
> >      > +  if (type == VR_ANTI_RANGE && wi::eq_p (min, 0) && wi::eq_p
> >     (max, 0))
> >      > +    return true;
> >      > +
> >      > +  unsigned prec = TYPE_PRECISION (expr_type);
> >      > +  return (type == VR_RANGE
> >      > +         && wi::eq_p (min, wi::one (prec))
> >      > +         && wi::eq_p (max, wi::max_value (prec, TYPE_SIGN
> >     (expr_type))));
> >      > +}
> >
> >     Errr, wrong version posted.  There was a TYPE_UNSIGNED missing.
> >
> >     Fixed and committed.
> >
> >
> > Hi,
> > Since this was committed (r276654), I've noticed regressions on aarch64:
> >      gcc.target/aarch64/pr88838.c (test for excess errors)
> >      gcc.target/aarch64/stack-check-cfa-3.c (test for excess errors)
> >      gcc.target/aarch64/stack-check-prologue-16.c (test for excess
> errors)
> >      gcc.target/aarch64/sve/abs_1.c -march=armv8.2-a+sve
> >   scan-assembler-times \\tabs\\tz[0-9]+\\.b, p[0-7]/m, z[0-9]+\\.b\\n 1
> >      gcc.target/aarch64/sve/abs_1.c -march=armv8.2-a+sve
> >   scan-assembler-times \\tabs\\tz[0-9]+\\.d, p[0-7]/m, z[0-9]+\\.d\\n 1
> >      gcc.target/aarch64/sve/abs_1.c -march=armv8.2-a+sve
> >   scan-assembler-times \\tabs\\tz[0-9]+\\.h, p[0-7]/m, z[0-9]+\\.h\\n 1
> >      gcc.target/aarch64/sve/abs_1.c -march=armv8.2-a+sve
> >   scan-assembler-times \\tabs\\tz[0-9]+\\.s, p[0-7]/m, z[0-9]+\\.s\\n 1
> >      gcc.target/aarch64/sve/abs_1.c -march=armv8.2-a+sve (test for
> > excess errors)
> >      gcc.target/aarch64/sve/adr_1.c -march=armv8.2-a+sve (test for
> > excess errors)
> >
> > and many others
> >
> > For instance:
> > compiler exited with status 1
> > FAIL: gcc.target/aarch64/pr88838.c (internal compiler error)
> > FAIL: gcc.target/aarch64/pr88838.c (test for excess errors)
> > Excess errors:
> > during GIMPLE pass: dom
> > /gcc/testsuite/gcc.target/aarch64/pr88838.c:5:1: internal compiler
> > error: tree check: expected integer_cst, have poly_int_cst in to_wide,
> > at tree.h:5795
> > 0x5efa71 tree_check_failed(tree_node const*, char const*, int, char
> > const*, ...)
> >          /gcc/tree.c:9926
> > 0x749584 tree_check(tree_node const*, char const*, int, char const*,
> > tree_code)
> >          /gcc/tree.h:3523
> > 0x749584 wi::to_wide(tree_node const*)
> >          /gcc/tree.h:5795
> > 0xf7c0c0 value_range_base::lower_bound(unsigned int) const
> >          /gcc/tree-vrp.c:6136
> > 0x155d2e6 range_operator::fold_range(tree_node*, value_range_base
> > const&, value_range_base const&) const
> >          /gcc/range-op.cc:156
> > 0xf87597 range_fold_binary_expr(value_range_base*, tree_code,
> > tree_node*, value_range_base const*, value_range_base const*)
> >          /gcc/tree-vrp.c:1915
> > 0x1007962 vr_values::extract_range_from_binary_expr(value_range*,
> > tree_code, tree_node*, tree_node*, tree_node*)
> >          /gcc/vr-values.c:808
> > 0x1011f0c vr_values::extract_range_from_assignment(value_range*,
> gassign*)
> >          /gcc/vr-values.c:1469
> > 0x1499d21 evrp_range_analyzer::record_ranges_from_stmt(gimple*, bool)
> >          /gcc/gimple-ssa-evrp-analyze.c:307
> > 0xdd76dd dom_opt_dom_walker::before_dom_children(basic_block_def*)
> >          /gcc/tree-ssa-dom.c:1503
> > 0x146e68a dom_walker::walk(basic_block_def*)
> >          /gcc/domwalk.c:309
> > 0xdd4759 execute
> >          /gcc/tree-ssa-dom.c:724
> >
> > gcc.target/aarch64/pr88838.c: output file does not exist
> > UNRESOLVED: gcc.target/aarch64/pr88838.c scan-assembler-not sxtw
> >
> > Christophe
> >
> >     diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c
> >     index 20a0bddcbab..5020f4a44d5 100644
> >     --- a/gcc/ipa-prop.c
> >     +++ b/gcc/ipa-prop.c
> >     @@ -5117,6 +5117,7 @@ ipa_vr::nonzero_p (tree expr_type) const
> >
> >          unsigned prec = TYPE_PRECISION (expr_type);
> >          return (type == VR_RANGE
> >     +         && TYPE_UNSIGNED (expr_type)
> >                 && wi::eq_p (min, wi::one (prec))
> >                 && wi::eq_p (max, wi::max_value (prec, TYPE_SIGN
> >     (expr_type))));
> >        }
> >
>

Reply via email to