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.