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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2022-02-14
   Target Milestone|---                         |10.4
     Ever confirmed|0                           |1
           Assignee|unassigned at gcc dot gnu.org      |rguenth at gcc dot 
gnu.org
             Status|UNCONFIRMED                 |ASSIGNED

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
vector lowering produces

  _5 = BIT_FIELD_REF <f_1(D), 64, 0>;
  _6 = (_Decimal32) _5;
  _7 = BIT_FIELD_REF <f_1(D), 64, 64>;
  _8 = (_Decimal32) _7;
  _9 = BIT_FIELD_REF <f_1(D), 64, 128>;
  _10 = (_Decimal32) _9;
  _11 = BIT_FIELD_REF <f_1(D), 64, 192>;
  _12 = (_Decimal32) _11;
  d_2 = {_6, _8, _10, _12};

where the BIT_FIELD_REFs extract _Float64.  Then forwprop matches the
CTOR as VEC_PACK_TRUNC_EXPR from vector(2) _Float64 to vetor(4) _Decimal32.

  _13 = BIT_FIELD_REF <f_1(D), 128, 0>;
  _14 = BIT_FIELD_REF <f_1(D), 128, 128>;
  d_2 = VEC_PACK_TRUNC_EXPR <_13, _14>;

I'm not sure if decimal FP vectors are a thing on powerpc64le and what their
ABI are.  Maybe the testcase should be rejected.

Clearly the forwprop code is wrong here, since the vec_pack_trunc optab
has just a single mode there's no way to convert between DFP and FP.

I'll fix that, not sure if that will fix everything.

Reply via email to