mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-10 21:50:09 +08:00
genrecog.c (write_switch): Return the first condition that needs a label.
* genrecog.c (write_switch): Return the first condition that needs a label. From-SVN: r36903
This commit is contained in:
parent
a911742751
commit
1651ab853f
@ -1,3 +1,8 @@
|
||||
2000-10-17 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
* genrecog.c (write_switch): Return the first condition that needs a
|
||||
label.
|
||||
|
||||
2000-10-17 Bernd Schmidt <bernds@redhat.co.uk>
|
||||
|
||||
* c-tree.h (warn_sequence_point): Move declaration to...
|
||||
|
@ -1650,6 +1650,7 @@ write_switch (start, depth)
|
||||
{
|
||||
struct decision *p = start;
|
||||
enum decision_type type = p->tests->type;
|
||||
struct decision *needs_label = NULL;
|
||||
|
||||
/* If we have two or more nodes in sequence that test the same one
|
||||
thing, we may be able to use a switch statement. */
|
||||
@ -1674,6 +1675,9 @@ write_switch (start, depth)
|
||||
code = p->tests->u.code;
|
||||
do
|
||||
{
|
||||
if (p != start && p->need_label && needs_label == NULL)
|
||||
needs_label = p;
|
||||
|
||||
printf (" case ");
|
||||
print_code (code);
|
||||
printf (":\n goto L%d;\n", p->success.first->number);
|
||||
@ -1697,7 +1701,10 @@ write_switch (start, depth)
|
||||
we don't actually write the test here, as it gets kinda messy.
|
||||
It is trivial to leave this to later by telling our caller that
|
||||
we only processed the CODE tests. */
|
||||
ret = p;
|
||||
if (needs_label != NULL)
|
||||
ret = needs_label;
|
||||
else
|
||||
ret = p;
|
||||
|
||||
while (p && p->tests->type == DT_pred
|
||||
&& p->tests->u.pred.index >= 0)
|
||||
@ -1774,6 +1781,9 @@ write_switch (start, depth)
|
||||
|
||||
do
|
||||
{
|
||||
if (p != start && p->need_label && needs_label == NULL)
|
||||
needs_label = p;
|
||||
|
||||
printf (" case ");
|
||||
switch (type)
|
||||
{
|
||||
@ -1800,7 +1810,7 @@ write_switch (start, depth)
|
||||
|
||||
printf (" default:\n break;\n }\n");
|
||||
|
||||
return p;
|
||||
return needs_label != NULL ? needs_label : p;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user