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:
parent
a4f9edf36c
commit
839d0860cf
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
14
gcc/testsuite/gcc.dg/pr89518.c
Normal file
14
gcc/testsuite/gcc.dg/pr89518.c
Normal 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" } } */
|
Loading…
Reference in New Issue
Block a user