https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119876

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Depends on|                            |119920

--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
With the patch I attached to PR 119920 which does the factoring in ifconv we
get:
```
.L2:
        vmovdqa32       b(%rax), %zmm0
        addq    $64, %rax
        vpcmpd  $6, %zmm3, %zmm0, %k1 // compare
        vmovdqa32       %zmm1, %zmm0 // set zmm0 to 2s
        vpsrld  $31, %zmm2, %zmm0{%k1} // blends in 1
        vpaddd  c-64(%rax), %zmm0, %zmm0 // add
        vmovdqa32       %zmm0, a-64(%rax)
        cmpq    $3968, %rax
        jne     .L2
```

Or rather:
```
  <bb 3> [local count: 665719666]:
  # ivtmp.36_60 = PHI <ivtmp.36_64(3), 0(2)>
  vect__1.13_49 = MEM <vector(16) int> [(int *)&b + ivtmp.36_60 * 1];
  mask__4.14_50 = vect__1.13_49 > { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0 };
  vect__28.15_51 = .VCOND_MASK (mask__4.14_50, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1 }, { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 });
  vect_pretmp_6.10_46 = MEM <vector(16) int> [(int *)&c + ivtmp.36_60 * 1];
  vect_iftmp.16_52 = vect_pretmp_6.10_46 + vect__28.15_51;
  MEM <vector(16) int> [(int *)&a + ivtmp.36_60 * 1] = vect_iftmp.16_52;
  ivtmp.36_64 = ivtmp.36_60 + 64;
  if (ivtmp.36_64 != 3968)
    goto <bb 3>; [98.39%]
  else
    goto <bb 4>; [1.61%]

```


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119920
[Bug 119920] Missed vectorization for conditioned adds

Reply via email to