===================================================================
@@ -1878,8 +1878,7 @@ dt_simplify::gen (FILE *f, bool gimple)
unsigned n_braces = 0;
if (s->ifexpr_vec != vNULL)
{
- // we add in LIFO order, so traverse backwards
- for (int i = s->ifexpr_vec.length () - 1; i >= 0; --i)
+ for (unsigned i = 0; i < s->ifexpr_vec.length (); ++i)
{
if_or_with &w = s->ifexpr_vec[i];
if (w.is_with)
@@ -1897,7 +1896,7 @@ dt_simplify::gen (FILE *f, bool gimple)
w.cexpr->gen_transform (f, NULL, true, 1, "type");
else
{
- int j = i;
+ unsigned j = i;
do
{
if (j != i)
@@ -1910,10 +1909,11 @@ dt_simplify::gen (FILE *f, bool gimple)
s->ifexpr_vec[j].cexpr->gen_transform (f, NULL,
true, 1, "type");
fprintf (f, ")");
- --j;
+ ++j;
}
- while (j >= 0 && !s->ifexpr_vec[j].is_with);
- i = j + 1;
+ while (j < s->ifexpr_vec.length ()
+ && !s->ifexpr_vec[j].is_with);
+ i = j - 1;
}
fprintf (f, ")\n");
}
@@ -2511,18 +2511,6 @@ parse_op (cpp_reader *r)
return op;
}
-/* Return a reversed copy of V. */
-
-template <class T>
-static vec<T>
-copy_reverse (vec<T> v)
-{
- vec<T> c = vNULL;
- for (int i = v.length ()-1; i >= 0; --i)
- c.safe_push (v[i]);
- return c;
-}
-
/* Parse
'simplify' [ <ident> ] <expr> <result-op>
with
@@ -2557,12 +2545,12 @@ parse_simplify (cpp_reader *r, source_lo
if (matcher->nargs == -1)
matcher->nargs = 0;
simplifiers.safe_push
- (new simplify (match, match_location, NULL, token->src_loc));
+ (new simplify (match, match_location, NULL,
+ token->src_loc, active_ifs.copy ()));
return;
}
- auto_vec<if_or_with> ifexprs;
- ifexprs.safe_splice (active_ifs);
+ unsigned active_ifs_len = active_ifs.length ();
while (1)
{
if (token->type == CPP_OPEN_PAREN)
@@ -2572,8 +2560,8 @@ parse_simplify (cpp_reader *r, source_lo
if (peek_ident (r, "if"))
{
eat_ident (r, "if");
- ifexprs.safe_push (if_or_with (parse_c_expr (r, CPP_OPEN_PAREN),
- token->src_loc, false));
+ active_ifs.safe_push (if_or_with (parse_c_expr (r, CPP_OPEN_PAREN),
+ token->src_loc, false));
/* If this if is immediately closed then it contains a
manual matcher or is part of a predicate definition.
Push it. */
@@ -2587,7 +2575,7 @@ parse_simplify (cpp_reader *r, source_lo
matcher->nargs = 0;
simplifiers.safe_push
(new simplify (match, match_location, NULL,
- paren_loc, ifexprs));
+ paren_loc, active_ifs.copy ()));
}
}
else if (peek_ident (r, "with"))
@@ -2596,7 +2584,7 @@ parse_simplify (cpp_reader *r, source_lo
/* Parse (with c-expr expr) as (if-with (true) expr). */
c_expr *e = parse_c_expr (r, CPP_OPEN_BRACE);
e->nr_stmts = 0;
- ifexprs.safe_push (if_or_with (e, token->src_loc, true));
+ active_ifs.safe_push (if_or_with (e, token->src_loc, true));
}
else
{
@@ -2614,13 +2602,13 @@ parse_simplify (cpp_reader *r, source_lo
}
simplifiers.safe_push
(new simplify (match, match_location, op,
- token->src_loc, ifexprs));
+ token->src_loc, active_ifs.copy ()));
eat_token (r, CPP_CLOSE_PAREN);
/* A "default" result closes the enclosing scope. */
- if (ifexprs.length () > 0)
+ if (active_ifs.length () > active_ifs_len)
{
eat_token (r, CPP_CLOSE_PAREN);
- ifexprs.pop ();
+ active_ifs.pop ();
}
else
return;
@@ -2629,10 +2617,10 @@ parse_simplify (cpp_reader *r, source_lo
else if (token->type == CPP_CLOSE_PAREN)
{
/* Close a scope if requested. */
- if (ifexprs.length () > 0)
+ if (active_ifs.length () > active_ifs_len)
{
eat_token (r, CPP_CLOSE_PAREN);
- ifexprs.pop ();
+ active_ifs.pop ();
token = peek (r);
}
else
@@ -2644,12 +2632,12 @@ parse_simplify (cpp_reader *r, source_lo
fatal_at (token, "expected match operand expression");
simplifiers.safe_push
(new simplify (match, match_location, parse_op (r),
- token->src_loc, ifexprs));
+ token->src_loc, active_ifs.copy ()));
/* A "default" result closes the enclosing scope. */
- if (ifexprs.length () > 0)
+ if (active_ifs.length () > active_ifs_len)
{
eat_token (r, CPP_CLOSE_PAREN);
- ifexprs.pop ();
+ active_ifs.pop ();
}
else
return;