Allow range invert to fail.

Return a boolean from range invert() to handle cases where an inversion
cannot be represented.

	PR tree-optimization/126536
	gcc/
	* gimple-range-edge.cc (calc_switch_ranges): Check that invert worked.
	* gimple-range-op.cc (cfn_toupper_tolower::fold_range): Likewise.
	* range-op-ptr.cc (operator_equal::op1_range): Likewise.
	(operator_not_equal::op1_range): Likewise.
	* range-op.cc (operator_equal::op1_range): Likewise.
	(operator_not_equal::op1_range): Likewise.
	(operator_rshift::op1_range): Likewise.
	(operator_logical_not::fold_range): Likewise.
	* tree-ssa-loop-unswitch.cc (unswitch_predicate): Likewise.
	* value-range.cc (irange_bitmask::range_from_mask): Likewise.
	(prange::invert): Return bool for success/fail.
	(irange::invert): Likewise.
	(irange::snap_subranges): Check that invert worked.
	(range_tests_int_range_max): Confirm failed invert works.
	(range_tests_misc): Check invert return value.
	* value-range.h (irange::invert): Add boolean return value.
	(prange::invert): Add boolean return value.
	* vr-values.cc (simplify_switch_using_ranges): Check invert result.

	gcc/testsuite/
	* gcc.dg/pr126536-1.c: New.
	* gcc.dg/pr126536-2.c: New.
10 files changed