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.

Reply via email to