{
new->code = preds[i].codes[0];
if (! strcmp ("const_int_operand", new->tests))
- new->tests = 0;
+ new->tests = 0, new->pred = -1;
}
for (j = 0; j < NUM_RTX_CODE && preds[i].codes[j] != 0; j++)
for (p = tree; p; p = p->next)
{
enum machine_mode mode = p->enforce_mode ? p->mode : VOIDmode;
+ int need_bracket;
+ int wrote_bracket = 0;
int inner_indent;
if (p->success.first == 0 && p->insn_code_number < 0)
else
uncond = 1;
+ need_bracket = ! uncond;
+
if (p->opno >= 0)
{
- printf ("%s{\n%sro[%d] = x%d;\n",
- indents[inner_indent], indents[inner_indent + 2],
- p->opno, depth);
- inner_indent += 2;
+ if (need_bracket)
+ {
+ printf ("%s{\n", indents[inner_indent]);
+ inner_indent += 2;
+ wrote_bracket = 1;
+ need_bracket = 0;
+ }
+
+ printf ("%sro[%d] = x%d;\n", indents[inner_indent], p->opno, depth);
}
if (p->c_test)
printf ("%sif (%s)\n", indents[inner_indent], p->c_test);
inner_indent += 2;
uncond = 0;
+ need_bracket = 1;
}
if (p->insn_code_number >= 0)
{
if (p->num_clobbers_to_add)
{
- if (p->opno < 0 || p->c_test)
+ if (need_bracket)
{
printf ("%s{\n", indents[inner_indent]);
inner_indent += 2;
printf ("%sreturn %d;\n",
indents[inner_indent], p->insn_code_number);
- if (p->opno < 0 || p->c_test)
+ if (need_bracket)
{
inner_indent -= 2;
printf ("%s}\n", indents[inner_indent]);
printf ("%sgoto L%d;\n", indents[inner_indent],
p->success.first->number);
- if (p->opno >= 0)
+ if (wrote_bracket)
printf ("%s}\n", indents[inner_indent - 2]);
}
/* We have now tested all alternatives. End any switches we have open
- and branch to the alternative node. */
+ and branch to the alternative node unless we know that we can't fall
+ through to the branch. */
if (switch_code != UNKNOWN)
{
printf ("%s}\n", indents[indent - 2]);
indent -= 4;
+ uncond = 0;
}
if (switch_mode != VOIDmode)
{
printf ("%s}\n", indents[indent - 2]);
indent -= 4;
+ uncond = 0;
}
if (indent != 2)
abort ();
+ if (uncond)
+ return;
+
if (afterward)
{
change_state (prevpos, afterward->position, 2);
register enum machine_mode mode;
{
for (; p; p = p->next)
- if (p->mode != mode || p->tests)
+ if ((p->enforce_mode ? p->mode : VOIDmode) != mode)
return 0;
return 1;