Commit af2682ef by Richard Stallman

*** empty log message ***

From-SVN: r836
parent 88d3b7f0
...@@ -3657,7 +3657,6 @@ expand_end_case (orig_index) ...@@ -3657,7 +3657,6 @@ expand_end_case (orig_index)
use_cost_table use_cost_table
= (TREE_CODE (TREE_TYPE (orig_index)) != ENUMERAL_TYPE = (TREE_CODE (TREE_TYPE (orig_index)) != ENUMERAL_TYPE
&& default_label != 0
&& estimate_case_costs (thiscase->data.case_stmt.case_list)); && estimate_case_costs (thiscase->data.case_stmt.case_list));
balance_case_nodes (&thiscase->data.case_stmt.case_list, 0); balance_case_nodes (&thiscase->data.case_stmt.case_list, 0);
emit_case_nodes (index, thiscase->data.case_stmt.case_list, emit_case_nodes (index, thiscase->data.case_stmt.case_list,
...@@ -3678,14 +3677,26 @@ expand_end_case (orig_index) ...@@ -3678,14 +3677,26 @@ expand_end_case (orig_index)
if (GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (index_expr))) if (GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (index_expr)))
> GET_MODE_BITSIZE (index_mode)) > GET_MODE_BITSIZE (index_mode))
{ {
enum machine_mode omode = TYPE_MODE (TREE_TYPE (index_expr));
rtx rangertx = expand_expr (range, 0, VOIDmode, 0);
/* We must handle the endpoints in the original mode. */
index_expr = build (MINUS_EXPR, TREE_TYPE (index_expr), index_expr = build (MINUS_EXPR, TREE_TYPE (index_expr),
index_expr, minval); index_expr, minval);
minval = integer_zero_node; minval = integer_zero_node;
index = expand_expr (index_expr, 0, VOIDmode, 0);
emit_cmp_insn (rangertx, index, LTU, 0, omode, 0, 0);
emit_jump_insn (gen_bltu (default_label));
/* Now we can safely truncate. */
index = convert_to_mode (index_mode, index, 0);
}
else
{
if (TYPE_MODE (TREE_TYPE (index_expr)) != index_mode)
index_expr = convert (type_for_size (index_bits, 0),
index_expr);
index = expand_expr (index_expr, 0, VOIDmode, 0);
} }
if (TYPE_MODE (TREE_TYPE (index_expr)) != index_mode)
index_expr = convert (type_for_size (index_bits, 0),
index_expr);
index = expand_expr (index_expr, 0, VOIDmode, 0);
emit_queue (); emit_queue ();
index = protect_from_queue (index, 0); index = protect_from_queue (index, 0);
do_pending_stack_adjust (); do_pending_stack_adjust ();
...@@ -3705,13 +3716,11 @@ expand_end_case (orig_index) ...@@ -3705,13 +3716,11 @@ expand_end_case (orig_index)
index_expr, minval))); index_expr, minval)));
index = expand_expr (index_expr, 0, VOIDmode, 0); index = expand_expr (index_expr, 0, VOIDmode, 0);
emit_queue (); emit_queue ();
/* convert_to_mode calls protect_from_queue. */ index = protect_from_queue (index, 0);
index = convert_to_mode (Pmode, index, 1);
do_pending_stack_adjust (); do_pending_stack_adjust ();
do_tablejump (index, Pmode, do_tablejump (index, TYPE_MODE (TREE_TYPE (index_expr)),
gen_rtx (CONST_INT, VOIDmode, expand_expr (range, 0, VOIDmode, 0),
TREE_INT_CST_LOW (range)),
table_label, default_label); table_label, default_label);
win = 1; win = 1;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment