re PR tree-optimization/89518 (missed optimisation for array address calculations)

2019-05-03  Richard Biener  <rguenther@suse.de>

	PR middle-end/89518
	* match.pd: Add pattern to optimize (A / B) * B + (A % B) to A.

	* gcc.dg/pr89518.c: New testcase.

From-SVN: r270846
This commit is contained in:
Richard Biener 2019-05-03 10:46:13 +00:00 committed by Richard Biener
parent a4f9edf36c
commit 839d0860cf
4 changed files with 31 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2019-05-03 Richard Biener <rguenther@suse.de>
PR middle-end/89518
* match.pd: Add pattern to optimize (A / B) * B + (A % B) to A.
2019-05-03 Richard Biener <rguenther@suse.de>
PR middle-end/87314

View File

@ -2736,6 +2736,13 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(mult (convert1? (exact_div @0 @@1)) (convert2? @1))
(convert @0))
/* Simplify (A / B) * B + (A % B) -> A. */
(for div (trunc_div ceil_div floor_div round_div)
mod (trunc_mod ceil_mod floor_mod round_mod)
(simplify
(plus:c (mult:c (div @0 @1) @1) (mod @0 @1))
@0))
/* ((X /[ex] A) +- B) * A --> X +- A * B. */
(for op (plus minus)
(simplify

View File

@ -1,3 +1,8 @@
2019-05-03 Richard Biener <rguenther@suse.de>
PR middle-end/89518
* gcc.dg/pr89518.c: New testcase.
2019-05-03 Richard Biener <rguenther@suse.de>
PR middle-end/87314

View File

@ -0,0 +1,14 @@
/* { dg-do compile } */
/* { dg-options "-O -fdump-tree-original" } */
unsigned foo (unsigned a, unsigned b)
{
return a/b * b + a%b;
}
int bar (int a, int b)
{
return a/b * b + a%b;
}
/* { dg-final { scan-tree-dump-times "return a;" 2 "original" } } */