* stmt.c (emit_case_nodes): Convert modes properly in low+high test.

From-SVN: r43847
This commit is contained in:
Richard Henderson 2001-07-08 09:03:26 -07:00 committed by Richard Henderson
parent d5d6a58b0a
commit 45c8268d06
2 changed files with 15 additions and 6 deletions

View File

@ -1,3 +1,7 @@
2001-07-08 Richard Henderson <rth@redhat.com>
* stmt.c (emit_case_nodes): Convert modes properly in low+high test.
2001-07-08 Richard Henderson <rth@redhat.com>
* config/i386/i386.md: Remove constraints strings from define_split

View File

@ -6321,19 +6321,24 @@ emit_case_nodes (index, node, default_label, index_type)
}
else if (!low_bound && !high_bound)
{
/* Instead of doing two branches emit test (index-low) <= (high-low). */
/* Instead of doing two branches, emit
(index-low) <= (high-low). */
tree new_bound = fold (build (MINUS_EXPR, index_type, node->high,
node->low));
rtx new_index;
new_index = expand_binop (mode, sub_optab, index,
expand_expr (node->low, NULL_RTX,
VOIDmode, 0),
NULL_RTX, 0, OPTAB_WIDEN);
convert_modes (mode, imode,
expand_expr (node->low, NULL_RTX,
mode, 0),
unsignedp),
NULL_RTX, unsignedp, OPTAB_WIDEN);
emit_cmp_and_jump_insns (new_index,
expand_expr (new_bound, NULL_RTX,
VOIDmode, 0),
convert_modes (mode, imode,
expand_expr (new_bound, NULL_RTX,
mode, 0),
unsignedp),
GT, NULL_RTX, mode, 1, 0,
default_label);
}