https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127039
Bug ID: 127039
Summary: [17 Regression] forwprop never terminates on a
reduction pair against a vector constant (RVV, SVE)
Product: gcc
Version: 17.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: kito at gcc dot gnu.org
Target Milestone: ---
I got out of memory when I run gcc testsuite for RISC-V:
gcc.target/riscv/pr117506.c
and found it seems cause by forwprop, it rewrites the same statement forever
and the compiler runs until the machine is out of memory.
And this bug can be reproduce on both AArch64 and RISC-V:
Reduced testcase:
```c
char a;
int b;
unsigned c;
short d;
void
foo (void)
{
for (short f = 0; f < c; f += 3)
{
a ^= d;
b = b < 0 ? b : 0;
}
}
```
```
$ riscv64-unknown-linux-gnu-gcc -march=rv64im_zve64f -mabi=lp64 -O3 -S t.c
virtual memory exhausted: Cannot allocate memory # under ulimit -v 4000000
```
aarch64:
```
$ aarch64-linux-gnu-gcc -march=armv8.2-a+sve -O3
--param=vect-partial-vector-usage=0 -S t.c
virtual memory exhausted: Cannot allocate memory # under ulimit -v 4000000
```
Dump from AArch64 219t.forwprop4:
```
...
_3722151 = .REDUC_MIN ({ 0, ... });
_3722152 = MIN_EXPR <vect_b_lsm.14_75, { 0, ... }>;
_3722153 = .REDUC_MIN (vect_b_lsm.14_75);
_3722154 = .REDUC_MIN ({ 0, ... });
_3722155 = MIN_EXPR <vect_b_lsm.14_75, { 0, ... }>;
_81 = .REDUC_MIN (_3722155);
gimple_simplified to _3722156 = .REDUC_MIN (vect_b_lsm.14_75);
_3722157 = .REDUC_MIN ({ 0, ... });
_3722158 = MIN_EXPR <vect_b_lsm.14_75, { 0, ... }>;
_3722159 = .REDUC_MIN (vect_b_lsm.14_75);
_3722160 = .REDUC_MIN ({ 0, ... });
_3722161 = MIN_EXPR <vect_b_lsm.14_75, { 0, ... }>;
_3722162 = .REDUC_MIN (vect_b_lsm.14_75);
_3722163 = .REDUC_MIN ({ 0, ... });
_3722164 = MIN_EXPR <vect_b_lsm.14_75, { 0, ... }>;
_3722165 = .REDUC_MIN (vect_b_lsm.14_75);
_3722166 = .REDUC_MIN ({ 0, ... });
_3722167 = MIN_EXPR <vect_b_lsm.14_75, { 0, ... }>;
_3722168 = .REDUC_MIN (vect_b_lsm.14_75);
_3722169 = .REDUC_MIN ({ 0, ... });
_3722170 = MIN_EXPR <vect_b_lsm.14_75, { 0, ... }>;
_3722171 = .REDUC_MIN (vect_b_lsm.14_75);
_3722172 = .REDUC_MIN ({ 0, ... });
_3722173 = MIN_EXPR <vect_b_lsm.14_75, { 0, ... }>;
_3722174 = .REDUC_MIN (vect_b_lsm.14_75);
_3722175 = .REDUC_MIN ({ 0, ... });
_3722176 = MIN_EXPR <vect_b_lsm.14_75, { 0, ... }>;
_3722177 = .REDUC_MIN (vect_b_lsm.14_75);
_3722178 = .REDUC_MIN ({ 0, ... });
_3722179 = MIN_EXPR <vect_b_lsm.14_75, { 0, ... }>;
_3722180 = .REDUC_MIN (vect_b_lsm.14_75);
_3722181 = .REDUC_MIN ({ 0, ... });
_3722182 = MIN_EXPR <vect_b_lsm.14_75, { 0, ... }>;
_3722183 = .REDUC_MIN (vect_b_lsm.14_75);
_3722184 = .REDUC_MIN ({ 0, ... });
_3722185 = MIN_EXPR <vect_b_lsm.14_75, { 0, ... }>;
_3722186 = .REDUC_MIN (vect_b_lsm.14_75);
_3722187 = .REDUC_MIN ({ 0, ... });
_3722188 = MIN_EXPR <vect_b_lsm.14_75, { 0, ... }>;
_81 = .REDUC_MIN (_3722188);
....
```
And seems cause by r17-3153-gc74d6b12af6103