tree-optimization/110838 - less aggressively fold out-of-bound shifts
The following adjusts the shift simplification patterns to avoid touching out-of-bound shift value arithmetic right shifts of possibly negative values. While simplifying those to zero isn't wrong it's violating the principle of least surprise. PR tree-optimization/110838 * match.pd (([rl]shift @0 out-of-bounds) -> zero): Restrict the arithmetic right-shift case to non-negative operands.
This commit is contained in:
parent
2d2f090e67
commit
04aa0edcac
1 changed files with 4 additions and 0 deletions
|
@ -1081,6 +1081,10 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
|
|||
(simplify
|
||||
(shift @0 uniform_integer_cst_p@1)
|
||||
(if ((GIMPLE || !sanitize_flags_p (SANITIZE_SHIFT_EXPONENT))
|
||||
/* Leave arithmetic right shifts of possibly negative values alone. */
|
||||
&& (TYPE_UNSIGNED (type)
|
||||
|| shift == LSHIFT_EXPR
|
||||
|| tree_expr_nonnegative_p (@0))
|
||||
/* Use a signed compare to leave negative shift counts alone. */
|
||||
&& wi::ges_p (wi::to_wide (uniform_integer_cst_p (@1)),
|
||||
element_precision (type)))
|
||||
|
|
Loading…
Add table
Reference in a new issue