Commit 839d0860 by Richard Biener Committed by Richard Biener

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
parent a4f9edf3
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
* match.pd (cmp (convert1?@2 addr@0) (convert2? addr@1)):
Handle STRING_CST vs DECL or STRING_CST.
......
......@@ -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
......
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
* gcc.dg/pr87314-1.c: New testcase.
......
/* { 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" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment