https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70288
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |ASSIGNED
Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot
gnu.org
--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
At -O1 cunroll produces an unreasonably amount of tests/BBs which later
produces compile-time hogs.
Estimated size after unrolling: 1
test_case_2.c:25:13: note: loop with 11 iterations completely unrolled
Estimated size after unrolling: 1
test_case_2.c:15:11: note: loop with 6 iterations completely unrolled
Estimated size after unrolling: 1
test_case_2.c:27:9: note: loop with 10 iterations completely unrolled
Estimated size after unrolling: 1
test_case_2.c:10:7: note: loop with 5 iterations completely unrolled
Estimated size after unrolling: 1
test_case_2.c:29:5: note: loop with 11 iterations completely unrolled
Estimated size after unrolling: 1
test_case_2.c:30:3: note: loop with 12 iterations completely unrolled
because we think that all the
size: 2 if (&s2_108 > &s1_115)
Constant conditional.
conds are optimized. But they are not (they'll be jump-threaded eventually).
This is from the innermost loop which has
double s1_115[4], s2_108[4];
...
if (s2_108 > s1_115) {
int var23 = -890798748;
do {
long long e_119[4];
} while (var23 <= -890798746);
}
and thus compares addresses of unrelated variables which invokes undefined
behavior (but which we usually won't fold to a constant or trap/unreachable).
I'll fix the cunroll size heuristic.