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