https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110556
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot gnu.org --- Comment #11 from Richard Biener <rguenth at gcc dot gnu.org> --- The issue is tail merging and I think we have a duplicate bug for this. find_duplicates: <bb 5> duplicate of <bb 7> Removing basic block 7 ;; basic block 7, loop depth 0 ;; pred: _27 = -9223372036854775808 / si2_15(D); goto <bb 10>; [100.00%] and we have <bb 4> [local count: 268435457]: _5 = si2_15(D) > 0; _6 = _1 | _5; if (_6 != 0) goto <bb 6>; [20.00%] else goto <bb 5>; [80.00%] <bb 5> [local count: 214748365]: _13 = -9223372036854775808 / si1_14(D); goto <bb 10>; [100.00%] <bb 6> [local count: 301989889]: _7 = si1_14(D) > 0; _9 = _2 | _7; if (_9 != 0) goto <bb 8>; [0.00%] else goto <bb 7>; [100.00%] <bb 7> [local count: 301989888]: _27 = -9223372036854775808 / si2_15(D); goto <bb 10>; [100.00%] oddly enough gimple_equal_p looks strange: case GIMPLE_ASSIGN: lhs1 = gimple_get_lhs (s1); lhs2 = gimple_get_lhs (s2); if (TREE_CODE (lhs1) != SSA_NAME && TREE_CODE (lhs2) != SSA_NAME) return (operand_equal_p (lhs1, lhs2, 0) && gimple_operand_equal_value_p (gimple_assign_rhs1 (s1), gimple_assign_rhs1 (s2))); else if (TREE_CODE (lhs1) == SSA_NAME && TREE_CODE (lhs2) == SSA_NAME) return operand_equal_p (gimple_assign_rhs1 (s1), gimple_assign_rhs1 (s2), 0); that looks pre-tuplish to me.