Modify range_operator::fold_range() and wi_fold () to return via reference.
2019-11-08 Andrew MacLeod <amacleod@redhat.com> * range-op.h (range_operator::fold_range): Return result in a reference parameter instead of by value. (range_operator::wi_fold): Same. * range-op.cc (range_operator::wi_fold): Return result in a reference parameter instead of by value. (range_operator::fold_range): Same. (value_range_from_overflowed_bounds): Same. (value_range_with_overflow): Same (create_possibly_reversed_range): Same. (operator_equal::fold_range): Same. (operator_not_equal::fold_range): Same. (operator_lt::fold_range): Same. (operator_le::fold_range): Same. (operator_gt::fold_range): Same. (operator_ge::fold_range): Same. (operator_plus::wi_fold): Same. (operator_plus::op1_range): Change call to fold_range. (operator_plus::op2_range): Change call to fold_range. (operator_minus::wi_fold): Return result via reference parameter. (operator_minus::op1_range): Change call to fold_range. (operator_minus::op2_range): Change call to fold_range. (operator_min::wi_fold): Return result via reference parameter. (operator_max::wi_fold): Same. (cross_product_operator::wi_cross_product): Same. (operator_mult::wi_fold): Same. (operator_div::wi_fold): Same. (operator_div op_floor_div): Fix whitespace. (operator_exact_divide::op1_range): Change call to fold_range. (operator_lshift::fold_range): Return result via reference parameter. (operator_lshift::wi_fold): Same. (operator_rshift::fold_range): Same. (operator_rshift::wi_fold): Same. (operator_cast::fold_range): Same. (operator_cast::op1_range): Change calls to fold_range. (operator_logical_and::fold_range): Return result via reference. (wi_optimize_and_or): Adjust call to value_range_with_overflow. (operator_bitwise_and::wi_fold): Return result via reference. (operator_logical_or::fold_range): Same. (operator_bitwise_or::wi_fold): Same. (operator_bitwise_xor::wi_fold): Same. (operator_trunc_mod::wi_fold): Same. (operator_logical_not::fold_range): Same. (operator_bitwise_not::fold_range): Same. (operator_bitwise_not::op1_range): Change call to fold_range. (operator_cst::fold_range): Return result via reference. (operator_identity::fold_range): Same. (operator_abs::wi_fold): Same. (operator_absu::wi_fold): Same. (operator_negate::fold_range): Same. (operator_negate::op1_range): Change call to fold_range. (operator_addr_expr::fold_range): Return result via reference. (operator_addr_expr::op1_range): Change call to fold_range. (operator_pointer_plus::wi_fold): Return result via reference. (operator_pointer_min_max::wi_fold): Same. (operator_pointer_and::wi_fold): Same. (operator_pointer_or::wi_fold): Same. (range_op_handler): Change call to fold_range. (range_cast): Same. * tree-vrp.c (range_fold_binary_symbolics_p): Change call to fold_range. (range_fold_unary_symbolics_p): Same. (range_fold_binary_expr): Same. (range_fold_unary_expr): Same. From-SVN: r277979
This commit is contained in:
parent
77b29023e1
commit
bb74ef9e8c
@ -1,3 +1,69 @@
|
||||
2019-11-08 Andrew MacLeod <amacleod@redhat.com>
|
||||
|
||||
* range-op.h (range_operator::fold_range): Return result in a
|
||||
reference parameter instead of by value.
|
||||
(range_operator::wi_fold): Same.
|
||||
* range-op.cc (range_operator::wi_fold): Return result in a reference
|
||||
parameter instead of by value.
|
||||
(range_operator::fold_range): Same.
|
||||
(value_range_from_overflowed_bounds): Same.
|
||||
(value_range_with_overflow): Same
|
||||
(create_possibly_reversed_range): Same.
|
||||
(operator_equal::fold_range): Same.
|
||||
(operator_not_equal::fold_range): Same.
|
||||
(operator_lt::fold_range): Same.
|
||||
(operator_le::fold_range): Same.
|
||||
(operator_gt::fold_range): Same.
|
||||
(operator_ge::fold_range): Same.
|
||||
(operator_plus::wi_fold): Same.
|
||||
(operator_plus::op1_range): Change call to fold_range.
|
||||
(operator_plus::op2_range): Change call to fold_range.
|
||||
(operator_minus::wi_fold): Return result via reference parameter.
|
||||
(operator_minus::op1_range): Change call to fold_range.
|
||||
(operator_minus::op2_range): Change call to fold_range.
|
||||
(operator_min::wi_fold): Return result via reference parameter.
|
||||
(operator_max::wi_fold): Same.
|
||||
(cross_product_operator::wi_cross_product): Same.
|
||||
(operator_mult::wi_fold): Same.
|
||||
(operator_div::wi_fold): Same.
|
||||
(operator_div op_floor_div): Fix whitespace.
|
||||
(operator_exact_divide::op1_range): Change call to fold_range.
|
||||
(operator_lshift::fold_range): Return result via reference parameter.
|
||||
(operator_lshift::wi_fold): Same.
|
||||
(operator_rshift::fold_range): Same.
|
||||
(operator_rshift::wi_fold): Same.
|
||||
(operator_cast::fold_range): Same.
|
||||
(operator_cast::op1_range): Change calls to fold_range.
|
||||
(operator_logical_and::fold_range): Return result via reference.
|
||||
(wi_optimize_and_or): Adjust call to value_range_with_overflow.
|
||||
(operator_bitwise_and::wi_fold): Return result via reference.
|
||||
(operator_logical_or::fold_range): Same.
|
||||
(operator_bitwise_or::wi_fold): Same.
|
||||
(operator_bitwise_xor::wi_fold): Same.
|
||||
(operator_trunc_mod::wi_fold): Same.
|
||||
(operator_logical_not::fold_range): Same.
|
||||
(operator_bitwise_not::fold_range): Same.
|
||||
(operator_bitwise_not::op1_range): Change call to fold_range.
|
||||
(operator_cst::fold_range): Return result via reference.
|
||||
(operator_identity::fold_range): Same.
|
||||
(operator_abs::wi_fold): Same.
|
||||
(operator_absu::wi_fold): Same.
|
||||
(operator_negate::fold_range): Same.
|
||||
(operator_negate::op1_range): Change call to fold_range.
|
||||
(operator_addr_expr::fold_range): Return result via reference.
|
||||
(operator_addr_expr::op1_range): Change call to fold_range.
|
||||
(operator_pointer_plus::wi_fold): Return result via reference.
|
||||
(operator_pointer_min_max::wi_fold): Same.
|
||||
(operator_pointer_and::wi_fold): Same.
|
||||
(operator_pointer_or::wi_fold): Same.
|
||||
(range_op_handler): Change call to fold_range.
|
||||
(range_cast): Same.
|
||||
* tree-vrp.c (range_fold_binary_symbolics_p): Change call to
|
||||
fold_range.
|
||||
(range_fold_unary_symbolics_p): Same.
|
||||
(range_fold_binary_expr): Same.
|
||||
(range_fold_unary_expr): Same.
|
||||
|
||||
2019-11-08 Richard Sandiford <richard.sandiford@arm.com>
|
||||
|
||||
* tree-vect-loop.c (neutral_op_for_slp_reduction): Take the
|
||||
|
811
gcc/range-op.cc
811
gcc/range-op.cc
File diff suppressed because it is too large
Load Diff
@ -50,9 +50,9 @@ class range_operator
|
||||
{
|
||||
public:
|
||||
// Perform an operation between 2 ranges and return it.
|
||||
virtual value_range fold_range (tree type,
|
||||
const value_range &lh,
|
||||
const value_range &rh) const;
|
||||
virtual void fold_range (value_range &r, tree type,
|
||||
const value_range &lh,
|
||||
const value_range &rh) const;
|
||||
|
||||
// Return the range for op[12] in the general case. LHS is the range for
|
||||
// the LHS of the expression, OP[12]is the range for the other
|
||||
@ -74,11 +74,11 @@ public:
|
||||
|
||||
protected:
|
||||
// Perform an operation between 2 sub-ranges and return it.
|
||||
virtual value_range wi_fold (tree type,
|
||||
const wide_int &lh_lb,
|
||||
const wide_int &lh_ub,
|
||||
const wide_int &rh_lb,
|
||||
const wide_int &rh_ub) const;
|
||||
virtual void wi_fold (value_range &r, tree type,
|
||||
const wide_int &lh_lb,
|
||||
const wide_int &lh_ub,
|
||||
const wide_int &rh_lb,
|
||||
const wide_int &rh_ub) const;
|
||||
};
|
||||
|
||||
extern range_operator *range_op_handler (enum tree_code code, tree type);
|
||||
|
@ -1781,9 +1781,8 @@ range_fold_binary_symbolics_p (value_range *vr,
|
||||
return true;
|
||||
}
|
||||
const range_operator *op = get_range_op_handler (vr, code, expr_type);
|
||||
*vr = op->fold_range (expr_type,
|
||||
vr0->normalize_symbolics (),
|
||||
vr1->normalize_symbolics ());
|
||||
op->fold_range (*vr, expr_type, vr0->normalize_symbolics (),
|
||||
vr1->normalize_symbolics ());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@ -1817,9 +1816,8 @@ range_fold_unary_symbolics_p (value_range *vr,
|
||||
return true;
|
||||
}
|
||||
const range_operator *op = get_range_op_handler (vr, code, expr_type);
|
||||
*vr = op->fold_range (expr_type,
|
||||
vr0->normalize_symbolics (),
|
||||
value_range (expr_type));
|
||||
op->fold_range (*vr, expr_type, vr0->normalize_symbolics (),
|
||||
value_range (expr_type));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@ -1846,9 +1844,8 @@ range_fold_binary_expr (value_range *vr,
|
||||
if (range_fold_binary_symbolics_p (vr, code, expr_type, &vr0, &vr1))
|
||||
return;
|
||||
|
||||
*vr = op->fold_range (expr_type,
|
||||
vr0.normalize_addresses (),
|
||||
vr1.normalize_addresses ());
|
||||
op->fold_range (*vr, expr_type, vr0.normalize_addresses (),
|
||||
vr1.normalize_addresses ());
|
||||
}
|
||||
|
||||
/* Perform a unary operation on a range. */
|
||||
@ -1869,9 +1866,8 @@ range_fold_unary_expr (value_range *vr,
|
||||
if (range_fold_unary_symbolics_p (vr, code, expr_type, vr0))
|
||||
return;
|
||||
|
||||
*vr = op->fold_range (expr_type,
|
||||
vr0->normalize_addresses (),
|
||||
value_range (expr_type));
|
||||
op->fold_range (*vr, expr_type, vr0->normalize_addresses (),
|
||||
value_range (expr_type));
|
||||
}
|
||||
|
||||
/* Given a COND_EXPR COND of the form 'V OP W', and an SSA name V,
|
||||
|
Loading…
Reference in New Issue
Block a user