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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|target                      |tree-optimization
     Ever confirmed|0                           |1
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2024-05-01

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
  __r = { 0, 0, 0, 0 };
  __builtin_memcpy (&__r, &data, 24);
  __r.2_4 = __r;
  _5 = VIEW_CONVERT_EXPR<_Rp>(__r.2_4);

That is a fancy way of doing a PERM like:
  _5 = VEC_PERM_EXPR <{ 0, 0, 0, 0 }, data_1(D), { 4, 5, 6, 0 }>;



And then it does:
  MEM[(struct _Head_base *)&D.183459 +
32B]._M_head_impl._M_data.D.184855._M_data = _5;
  MEM <unsigned long> [(struct simd *)&__r] = 0;
  __builtin_memcpy (&MEM <struct _MemberType> [(void *)&__r + 8B], &MEM[(const
struct simd &)&D.183459 + 32]._M_data, 24);
  SR.136_19 = MEM[(struct simd *)&__r];
  __r ={v} {CLOBBER(eos)};
  MEM[(struct simd *)&D.200690] = SR.136_19;

Which is another fancy way of doing a PERM like:
  SR.136_19 = VEC_PERM_EXPR <{ 0, 0, 0, 0 }, _5, { 0, 4, 5, 6 }>;

Reply via email to