This fixes bogus replacing of an unsigned (-x)/y division by -(x/y). Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.
Richard. 2020-09-18 Richard Biener <rguent...@suse.de> PR tree-optimization/97089 * tree-ssa-sccvn.c (visit_nary_op): Do not replace unsigned divisions. --- gcc/tree-ssa-sccvn.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index 64f1e8c9160..014b7bdfd01 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -4824,8 +4824,11 @@ visit_nary_op (tree lhs, gassign *stmt) } } break; - case RDIV_EXPR: case TRUNC_DIV_EXPR: + if (TYPE_UNSIGNED (type)) + break; + /* Fallthru. */ + case RDIV_EXPR: case MULT_EXPR: /* Match up ([-]a){/,*}([-])b with v=a{/,*}b, replacing it with -v. */ if (! HONOR_SIGN_DEPENDENT_ROUNDING (type)) -- 2.26.2