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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Target|                            |x86_64-*-*
                 CC|                            |tnfchris at gcc dot gnu.org
             Status|UNCONFIRMED                 |NEW
           Keywords|                            |needs-bisection,
                   |                            |needs-reduction
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2025-01-14
   Target Milestone|---                         |15.0

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed with -O3 -fopenmp-simd.  The operand_equal_p code isn't good:

3745              /* BIT_INSERT_EXPR has an implict operand as the type
precision
3746                 of op1.  Need to check to make sure they are the same.  */
3747              if (TREE_CODE (TREE_OPERAND (arg0, 1)) == INTEGER_CST
3748                  && TREE_CODE (TREE_OPERAND (arg1, 1)) == INTEGER_CST
3749                  && TYPE_PRECISION (type0) != TYPE_PRECISION (type1))
3750                return false;

but before the type/arg split we had

          if (TREE_CODE (TREE_OPERAND (arg0, 1)) == INTEGER_CST
              && TREE_CODE (TREE_OPERAND (arg1, 1)) == INTEGER_CST
              && TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (arg0, 1)))
                 != TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (arg1, 1))))
            return false;

subsituting type0/type1 is for the type of operand 1 of arg0/arg1 was wrong.

Tamar?

Reply via email to