aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2020-09-18 09:22:57 +0200
committerRichard Biener <rguenther@suse.de>2020-09-18 09:22:57 +0200
commit0f6150a5d368fc30540dac31e29f1d6d40f207d3 (patch)
tree4950cf039a69b990080203d23b75979879c42f14 /gcc
parent080ddd8a81ea39e92542fa7d7e2d7d27ee741710 (diff)
downloadgcc-0f6150a5d368fc30540dac31e29f1d6d40f207d3.zip
gcc-0f6150a5d368fc30540dac31e29f1d6d40f207d3.tar.gz
gcc-0f6150a5d368fc30540dac31e29f1d6d40f207d3.tar.bz2
tree-optimization/97089 - fix bogus unsigned division replacement
This fixes bogus replacing of an unsigned (-x)/y division by -(x/y). 2020-09-18 Richard Biener <rguenther@suse.de> PR tree-optimization/97089 * tree-ssa-sccvn.c (visit_nary_op): Do not replace unsigned divisions.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/tree-ssa-sccvn.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c
index 64f1e8c..014b7bd 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))