https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117278
Bug ID: 117278
Summary: [12/13/14/15 regression] Code at -Os is larger on
trunk than GCC 11.4.0
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: rtl-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: dccitaliano at gmail dot com
Target Milestone: ---
Looks like this regressed in GCC 12 and has never recovered since.
Testcase (https://godbolt.org/z/T1vvzWjvK)
int patatino(int* a) {
if (*a > 5 && *a % 2 == 0) {
if ((*a / 2) % 3 != 0) {
*a = *a / 2;
for (int i = 0; i < *a; i++) {
if (i % 2 == 0 && (*a - i) % 3 != 0 && (i + (*a - i)) % 11 != 0) {
for (int j = i; j < *a; j += 2) {
*a += j % 5;
if (j > *a / 3 && (*a + j) % 7 == 0 && (j * 2 + *a) % 13 == 0) {
*a -= j / 2;
}
}
}
}
} else {
*a = 0;
}
} else {
*a = *a + 1;
}
return 0;
}
Bisects to:
dc1969dab392661cdac1170bbb8c9f83f388580d is the first bad commit
commit dc1969dab392661cdac1170bbb8c9f83f388580d
Author: Xionghu Luo <[email protected]>
Date: Wed Dec 29 20:02:12 2021 -0600
loop-invariant: Don't move cold bb instructions to preheader in RTL
gcc/ChangeLog:
2021-12-30 Xionghu Luo <[email protected]>
* loop-invariant.c (find_invariants_bb): Check profile count
before motion.
(find_invariants_body): Add argument.
gcc/testsuite/ChangeLog:
2021-12-30 Xionghu Luo <[email protected]>
* gcc.dg/loop-invariant-2.c: New.
gcc/loop-invariant.c | 17 ++++++++++++++---
gcc/testsuite/gcc.dg/loop-invariant-2.c | 20 ++++++++++++++++++++
2 files changed, 34 insertions(+), 3 deletions(-)
create mode 100644 gcc/testsuite/gcc.dg/loop-invariant-2.c
bisect found first bad commit