https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118472
Tamar Christina <tnfchris at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED Assignee|unassigned at gcc dot gnu.org |tnfchris at gcc dot gnu.org --- Comment #2 from Tamar Christina <tnfchris at gcc dot gnu.org> --- (In reply to Richard Biener from comment #1) > 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? Yeah that's an overzealous replace... Will fix. Thanks