From: rguenth Date: Mon, 31 Aug 2015 14:00:16 +0000 (+0000) Subject: 2015-08-31 Richard Biener X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ed1990ec06fa77c3e1c2071a175be45e4a1fad55;p=thirdparty%2Fgcc.git 2015-08-31 Richard Biener PR middle-end/67381 * genmatch.c (dt_node::gen_kids): Also treat matches as barrier. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@227344 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0e97a190a20a..adc85fe964af 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2015-08-31 Richard Biener + + PR middle-end/67381 + * genmatch.c (dt_node::gen_kids): Also treat matches as barrier. + 2015-08-31 Marc Glisse * match.pd (SIN, COS, TAN, COSH): Reorder for consistency. diff --git a/gcc/genmatch.c b/gcc/genmatch.c index d92d8080dd01..72666373740c 100644 --- a/gcc/genmatch.c +++ b/gcc/genmatch.c @@ -2529,12 +2529,15 @@ dt_node::gen_kids (FILE *f, int indent, bool gimple) else gcc_unreachable (); } - else if (kids[i]->type == dt_node::DT_MATCH - || kids[i]->type == dt_node::DT_SIMPLIFY) + else if (kids[i]->type == dt_node::DT_SIMPLIFY) others.safe_push (kids[i]); - else if (kids[i]->type == dt_node::DT_TRUE) + else if (kids[i]->type == dt_node::DT_MATCH + || kids[i]->type == dt_node::DT_TRUE) { /* A DT_TRUE operand serves as a barrier - generate code now + for what we have collected sofar. + Like DT_TRUE, DT_MATCH serves as a barrier as it can cause + dependent matches to get out-of-order. Generate code now for what we have collected sofar. */ gen_kids_1 (f, indent, gimple, gimple_exprs, generic_exprs, fns, generic_fns, preds, others);