https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68590
--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
Not sure how this changed with the code but this is <= folding into == and then
(simplify
(eq @0 @0)
(if (! FLOAT_TYPE_P (TREE_TYPE (@0))
|| ! HONOR_NANS (TYPE_MODE (TREE_TYPE (@0))))
{ constant_boolean_node (true, type); }))
where @0 is "omitted".
if (op1 == op0 || operand_equal_p (op1, op0, 0))
{
{
/* #line 1857 "/space/rguenther/src/svn/trunk/gcc/match.pd" */
tree captures[1] ATTRIBUTE_UNUSED = { op0 };
/* #line 1857 "/space/rguenther/src/svn/trunk/gcc/match.pd" */
if (! FLOAT_TYPE_P (TREE_TYPE (captures[0])) || ! HONOR_NANS (TYPE_MODE
(TREE_TYPE (captures[0]))))
{
if (dump_file && (dump_flags & TDF_DETAILS)) fprintf (dump_file,
"Applying pattern match.pd:1859, %s:%d\n", __FILE__, __LINE__);
tree res;
res = constant_boolean_node (true, type);
if (TREE_SIDE_EFFECTS (captures[0]))
res = build2_loc (loc, COMPOUND_EXPR, type, fold_ignored_result
(captures[0]), res);
return res;
so the save_expr doesn't originate here. Instead it originates from
(for cmp (ge le)
(simplify
(cmp @0 @0)
(eq @0 @0)))
hmm. Yes, we use @0 twice here. But we also use a matching capture, sth
we (unfortunately) don't record (yet). We _do_ have a load that we
compare so avoiding the redundant computation when we duplicate an
operand makes sense even when there is no side-effect present (that was
the objective of the change). Simplifying
(le s1->length s1->length)
to
(eq save_expr <s1->length> save_expr <s1->length>)
looks like a win. Now simplifying that down to
(save_expr <s1->length>, 1)
is "correct" as well. And we can't just drop random save_exprs here because
of the comment in save_expr:
/* This expression might be placed ahead of a jump to ensure that the
value was computed on both sides of the jump. So make sure it isn't
eliminated as dead. */
TREE_SIDE_EFFECTS (t) = 1;
not sure what this is refering to... it sounds confusing - if it was placed
there and did not have side-effects it better should have a user via a
data dependence.