[Bug middle-end/88758] [9 Regression] 186.crafty in SPEC CPU 2000 failed to build

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Jan 8 17:26:00 GMT 2019


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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
                 CC|                            |jakub at gcc dot gnu.org
           Assignee|unassigned at gcc dot gnu.org      |jakub at gcc dot gnu.org

--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Created attachment 45382
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=45382&action=edit
gcc9-pr88758.patch

Untested fix.  Unfortunately, the testcase isn't really usable, because it
fails to link when this ICE is fixed (plus contains uninitialized use).

The problem is that while for non-VECTOR_CST_STEPPED_P VECTOR_CSTs it is just
fine when initializer_each_zero_or_onep checks only the encoded elts, if there
are fewer than subparts, the last one is repeated.  But, with
VECTOR_CST_STEPPED_P, the one after last one needs to be computed.
        unsigned HOST_WIDE_INT nelts = vector_cst_encoded_nelts (expr);
        if (VECTOR_CST_STEPPED_P (expr)
            && !TYPE_VECTOR_SUBPARTS (TREE_TYPE (expr)).is_constant (&nelts))
          return false;
seems to had this in mind, the only problem is that it results in nelts being
larger than vector_cst_encoded_nelts for those VECTOR_CST_STEPPED_P csts.  With
the attached patch, it will do what it did before for the encoded elts,
vector_cst_elt just returns what was used before.


More information about the Gcc-bugs mailing list