https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118184
--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Before the patch: - is with vectorization. + is without. With vectorization: u.d = Nan; _8 = mant_21 >> 32; _3 = {mant_21, _8}; vect__10.4_4 = (vector(2) unsigned int) _3; MEM <vector(2) unsigned int> [(union ieee854_long_double *)&u] = vect__10.4_4; retval_26 = u.d; Without: <bb 11> [local count: 11693048]: u.d = Nan; MEM <unsigned long> [(union ieee854_long_double *)&u] = mant_21; retval_26 = u.d; u ={v} {CLOBBER(eos)}; Both look correct. Though with vectorization is worse. - is with vectorization while + is without - fmov d31, x0 - fmov d30, x0 - mov x2, 0 - mov x3, 9223231299366420480 - ushr d31, d31, 32 - stp x2, x3, [sp, 16] - uzp1 v31.2d, v30.2d, v31.2d - xtn v31.2s, v31.2d - str d31, [sp, 16] - ldr q0, [sp, 16] + fmov d0, x0 + stp x20, x21, [sp, 16] + .cfi_offset 21, -72 + .cfi_offset 20, -80 + fmov v0.d[1], x21 + ldp x20, x21, [sp, 16] + .cfi_restore 21 + .cfi_restore 20 x21 is uninitialized which is wrong.