Handle overflow in dependence analysis lambda ops gracefully
authorRichard Biener <rguenther@suse.de>
Wed, 20 Jan 2021 10:28:30 +0000 (11:28 +0100)
committerRichard Biener <rguenther@suse.de>
Wed, 20 Jan 2021 15:32:11 +0000 (16:32 +0100)
commit261cdd23195bc921737fd7a44e34a93aaaaccc44
tree7f37b944a8f399454214be858ba4b5dad56c7252
parent49e8c14ef6f1f968602a04c8499a672182590e87
Handle overflow in dependence analysis lambda ops gracefully

The following tries to handle overflow in the integer computations
done by lambda ops of dependence analysis by failing instead of
silently continuing with overflowed values.

It also avoids treating large unsigned CHREC_RIGHT as negative
unless the chrec is of pointer type and avoids the most negative
integer value to avoid excessive overflow checking (with this
the fix for PR98758 can be partly simplified as seen).

I've added add_hwi and mul_hwi functions computing HOST_WIDE_INT
signed sum and product with indicating overflow, they hopefully
get matched to the appropriate internal functions.

I don't have any testcases triggering overflow in any of the
guarded computations.

2021-01-20  Richard Biener  <rguenther@suse.de>

* hwint.h (add_hwi): New function.
(mul_hwi): Likewise.
* tree-data-ref.c (initialize_matrix_A): Properly translate
tree constants and avoid HOST_WIDE_INT_MIN.
(lambda_matrix_row_add): Avoid undefined integer overflow
and return true on such overflow.
(lambda_matrix_right_hermite): Handle overflow from
lambda_matrix_row_add gracefully.  Simplify previous fix.
(analyze_subscript_affine_affine): Likewise.
gcc/hwint.h
gcc/tree-data-ref.c