From: Richard Biener Date: Wed, 12 Nov 2014 11:59:40 +0000 (+0000) Subject: genmatch.c (capture_info::capture_info): Add missing COND_EXPR handling. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6a3cbe90926bbe62fcbce85dc735cbf077fd0f0b;p=gcc.git genmatch.c (capture_info::capture_info): Add missing COND_EXPR handling. 2014-11-12 Richard Biener * genmatch.c (capture_info::capture_info): Add missing COND_EXPR handling. (capture_info::walk_match): Fix COND_EXPR handling. (capture_info::walk_result): Likewise. From-SVN: r217414 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3184fc9e3e0..26eeacab68f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2014-11-12 Richard Biener + + * genmatch.c (capture_info::capture_info): Add missing + COND_EXPR handling. + (capture_info::walk_match): Fix COND_EXPR handling. + (capture_info::walk_result): Likewise. + 2014-11-12 Richard Biener PR middle-end/63821 diff --git a/gcc/genmatch.c b/gcc/genmatch.c index 234b1a7987c..3dcdb70beef 100644 --- a/gcc/genmatch.c +++ b/gcc/genmatch.c @@ -1940,7 +1940,10 @@ capture_info::capture_info (simplify *s) info.safe_grow_cleared (s->capture_max + 1); e = as_a (s->match); for (unsigned i = 0; i < e->ops.length (); ++i) - walk_match (e->ops[i], i, false); + walk_match (e->ops[i], i, + (i != 0 && *e->operation == COND_EXPR) + || *e->operation == TRUTH_ANDIF_EXPR + || *e->operation == TRUTH_ORIF_EXPR); walk_result (s->result, false); @@ -1971,8 +1974,7 @@ capture_info::walk_match (operand *o, unsigned toplevel_arg, bool conditional_p) for (unsigned i = 0; i < e->ops.length (); ++i) { bool cond_p = conditional_p; - if (i == 0 - && *e->operation == COND_EXPR) + if (i != 0 && *e->operation == COND_EXPR) cond_p = true; else if (*e->operation == TRUTH_ANDIF_EXPR || *e->operation == TRUTH_ORIF_EXPR) @@ -2018,8 +2020,7 @@ capture_info::walk_result (operand *o, bool conditional_p) for (unsigned i = 0; i < e->ops.length (); ++i) { bool cond_p = conditional_p; - if (i == 0 - && *e->operation == COND_EXPR) + if (i != 0 && *e->operation == COND_EXPR) cond_p = true; else if (*e->operation == TRUTH_ANDIF_EXPR || *e->operation == TRUTH_ORIF_EXPR)