[Bug tree-optimization/70715] New: SCEV failed to prove no-overflow-ness information unsigned loop IV
amker at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Apr 18 11:40:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70715
Bug ID: 70715
Summary: SCEV failed to prove no-overflow-ness information
unsigned loop IV
Product: gcc
Version: 7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: amker at gcc dot gnu.org
Target Milestone: ---
Hi, below is a case in which SCEV failed to prove no-overflow-ness of converted
unsigned type loop IV. As a result, the address of pointer dereference isn't
recognized as SCEV.
/* { dg-do compile } */
/* { dg-options "-O3 -fdump-tree-ldist" } */
int
foo (char *p, unsigned n)
{
while(n--)
{
p[n]='A';
}
return 0;
}
/* Loop can be transformed into builtin memset since &p[n] is SCEV. */
/* { dg-final { scan-tree-dump "builtin_memset" "ldist" } } */
Actually, I added code supporting NE_EXPR as comparison code in loop exit
condition for PR68529. The only problem is: in function
number_of_iterations_exit, control_iv.base is expanded by
expand_simple_operations.
Given we have already encountered problems caused by this kind of expanding, we
may want to remove it in the future. For the moment, this can be easily fixed
by checking expanded expression in loop_exits_before_overflow.
I am testing a patch for this.
More information about the Gcc-bugs
mailing list