https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113576
--- Comment #21 from Hongtao Liu <liuhongt at gcc dot gnu.org> --- typedef unsigned long mp_limb_t; typedef long mp_size_t; typedef unsigned long mp_bitcnt_t; typedef mp_limb_t *mp_ptr; typedef const mp_limb_t *mp_srcptr; #define GMP_LIMB_BITS (sizeof(mp_limb_t) * 8) #define GMP_LIMB_MAX (~ (mp_limb_t) 0) mp_bitcnt_t mpn_common_scan (mp_limb_t limb, mp_size_t i, mp_srcptr up, mp_size_t un, mp_limb_t ux) { unsigned cnt; while (limb == 0) { i++; if (i == un) return (ux == 0 ? ~(mp_bitcnt_t) 0 : un * GMP_LIMB_BITS); limb = ux ^ up[i]; } return limb; } This one is miscompiled in 502.gcc_r 123 <bb 8> [local count: 862990464]: 124 _34 = ivtmp.20_20 * 32; 125 vect__5.15_59 = MEM <const vector(4) long unsigned int> [(const mp_limb_t *)vectp.14_53 + _34 * 1]; 126 mask_patt_9.16_61 = vect__5.15_59 == vect_cst__60; 127 ivtmp.20_32 = ivtmp.20_20 + 1; 128 if (mask_patt_9.16_61 == { -1, -1, -1, -1 }) 129 goto <bb 5>; [94.50%] 130 else 131 goto <bb 9>; [5.50%] is expanded to 30.L18: 31 movq %rdi, %rdx 32 incq %rdi 33 salq $5, %rdx 34 vpcmpeqq (%rax,%rdx), %ymm3, %k0 35 kmovb %k0, %edx 36 cmpb $-1, %dl 37 jne .L21