[Bug tree-optimization/104931] wrong-code with number_of_iterations_lt_to_ne
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Mar 15 10:37:03 GMT 2022
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104931
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
I think the issue is latent on trunk. The fix should be
diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c
index b767056aeb0..21e25cabbd2 100644
--- a/gcc/tree-ssa-loop-niter.c
+++ b/gcc/tree-ssa-loop-niter.c
@@ -1171,7 +1171,17 @@ number_of_iterations_lt_to_ne (tree type, affine_iv
*iv0, affine_iv *iv1,
bool exit_must_be_taken, bounds *bnds)
{
tree niter_type = TREE_TYPE (step);
- tree mod = fold_build2 (FLOOR_MOD_EXPR, niter_type, *delta, step);
+ tree mod;
+ if (POINTER_TYPE_P (type))
+ {
+ /* For pointers both step and delta have to be interpreted signed. */
+ mod = fold_build2 (FLOOR_MOD_EXPR, ssizetype,
+ fold_convert (ssizetype, *delta),
+ fold_convert (ssizetype, step));
+ mod = fold_convert (niter_type, mod);
+ }
+ else
+ mod = fold_build2 (FLOOR_MOD_EXPR, niter_type, *delta, step);
tree tmod;
mpz_t mmod;
tree assumption = boolean_true_node, bound, noloop;
More information about the Gcc-bugs
mailing list