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

Reply via email to