enum range_types new_range_type = VRP_UNDEFINED;
enum range_ops new_range_op = VRP_NONE;
int something_changed = 0;
- tarval *tmp_tv, *tv;
- ir_node *left, *right, *pred, *bound;
- int overflow_top, overflow_bottom;
- tarval *new_top, *new_bottom;
- pn_Cmp cmp;
node->vrp.valid = 1;
/* TODO: Check if all predecessors have valid VRP information*/
}
switch (get_irn_opcode(node)) {
- case iro_Const:
- tv = get_Const_tarval(node);
-
+ case iro_Const: {
+ tarval *tv = get_Const_tarval(node);
new_bits_set = tv;
new_bits_not_set = tarval_not(tv);
new_range_bottom = tv;
new_range_top = tv;
new_range_type = VRP_RANGE;
break;
+ }
+
+ case iro_And: {
+ ir_node *left, *right;
+ tarval *tmp_tv;
- case iro_And:
left = get_And_left(node);
right = get_And_right(node);
new_bits_node = left;
}
break;
+ }
- case iro_Add:
+ case iro_Add: {
+ ir_node *left, *right;
left = get_Add_left(node);
right = get_Add_right(node);
-
+ int overflow_top, overflow_bottom;
+ tarval *new_top, *new_bottom;
if (left->vrp.range_type == VRP_UNDEFINED || right->vrp.range_type ==
VRP_UNDEFINED || left->vrp.range_type == VRP_VARYING ||
new_range_type = VRP_UNDEFINED;
}
break;
+ }
- case iro_Sub:
+ case iro_Sub: {
+ ir_node *left, *right;
left = get_Sub_left(node);
right = get_Sub_right(node);
+ int overflow_top, overflow_bottom;
+ tarval *new_top, *new_bottom;
if (left->vrp.range_type == VRP_UNDEFINED || right->vrp.range_type ==
VRP_UNDEFINED) {
/* TODO Implement overflow handling*/
}
break;
+ }
+
+ case iro_Or: {
+ ir_node *left, *right;
+ tarval *tmp_tv;
- case iro_Or:
left = get_Or_left(node);
right = get_Or_right(node);
new_bits_node = left;
}
break;
+ }
+
+ case iro_Rotl: {
+ ir_node *left, *right;
- case iro_Rotl:
left = get_Rotl_left(node);
right = get_Rotl_right(node);
new_bits_not_set = tarval_or(bits_not_set, node->vrp.bits_not_set);
}
break;
+ }
- case iro_Shl:
+ case iro_Shl: {
+ ir_node *left, *right;
left = get_Shl_left(node);
right = get_Shl_right(node);
}
break;
+ }
+
+ case iro_Shr: {
+ ir_node *left, *right;
- case iro_Shr:
left = get_Shr_left(node);
right = get_Shr_right(node);
new_bits_not_set = tarval_or(bits_not_set, new_bits_not_set);
}
break;
+ }
+
+ case iro_Shrs: {
+ ir_node *left, *right;
- case iro_Shrs:
left = get_Shrs_left(node);
right = get_Shrs_right(node);
new_bits_not_set = tarval_or(bits_not_set, new_bits_not_set);
}
break;
+ }
+
+ case iro_Eor: {
+ ir_node *left, *right;
- case iro_Eor:
left = get_Eor_left(node);
right = get_Eor_right(node);
new_bits_set = tarval_or(bits_set, node->vrp.bits_set);
new_bits_not_set = tarval_or(bits_not_set, node->vrp.bits_not_set);
break;
+ }
- case iro_Id:
- pred = get_Id_pred(node);
+ case iro_Id: {
+ ir_node *pred = get_Id_pred(node);
new_bits_set = pred->vrp.bits_set;
new_bits_not_set = pred->vrp.bits_not_set;
new_range_top = pred->vrp.range_top;
new_range_bottom = pred->vrp.range_bottom;
new_range_type = pred->vrp.range_type;
break;
+ }
- case iro_Not:
- pred = get_Not_op(node);
+ case iro_Not: {
+ ir_node *pred = get_Not_op(node);
new_bits_set = tarval_or(pred->vrp.bits_not_set, node->vrp.bits_set);
new_bits_not_set = tarval_or(pred->vrp.bits_set, node->vrp.bits_not_set);
break;
+ }
- case iro_Conv:
- pred = get_Conv_op(node);
+ case iro_Conv: {
+ ir_node *pred = get_Conv_op(node);
ir_mode *old_mode = get_irn_mode(pred);
+
ir_mode *new_mode;
+ tarval *bits_not_set;
if (!mode_is_int(old_mode))
return 0;
node->vrp.range_bottom = pred->vrp.range_bottom;
}
break;
+ }
- case iro_Confirm:
- cmp = get_Confirm_cmp(node);
- bound = get_Confirm_bound(node);
+ case iro_Confirm: {
+ pn_Cmp cmp = get_Confirm_cmp(node);
+ ir_node *bound = get_Confirm_bound(node);
/** @todo: Handle non-Const bounds */
}
}
break;
+ }
- case iro_Phi:
+ case iro_Phi: {
/* combine all ranges*/
- pred = get_Phi_pred(node,0);
+ ir_node *pred = get_Phi_pred(node,0);
new_range_top = pred->vrp.range_top;
new_range_bottom = pred->vrp.range_bottom;
new_range_type = pred->vrp.range_type;
}
break;
-
+ }
default:
/* unhandled, therefore never updated */