re PR tree-optimization/79943 (Loop splitting breaks with loops of pointer type)
2017-03-08 Andrew Haley <aph@redhat.com> PR tree-optimization/79943 * tree-ssa-loop-split.c (compute_new_first_bound): When calculating the new upper bound, (END-BEG) should be added, not subtracted. From-SVN: r245974
This commit is contained in:
parent
2ff555ff0e
commit
f1a675e486
|
@ -1,3 +1,10 @@
|
||||||
|
2017-03-08 Andrew Haley <aph@redhat.com>
|
||||||
|
|
||||||
|
PR tree-optimization/79943
|
||||||
|
* tree-ssa-loop-split.c (compute_new_first_bound): When
|
||||||
|
calculating the new upper bound, (END-BEG) should be added, not
|
||||||
|
subtracted.
|
||||||
|
|
||||||
2017-03-08 Jakub Jelinek <jakub@redhat.com>
|
2017-03-08 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
* config/avr/avr.md (setmemhi): Make sure match_dup
|
* config/avr/avr.md (setmemhi): Make sure match_dup
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2017-03-08 Andrew Haley <aph@redhat.com>
|
||||||
|
|
||||||
|
PR tree-optimization/79943
|
||||||
|
* gcc.dg/tree-ssa/pr79943.c: New test.
|
||||||
|
|
||||||
2017-03-08 Richard Biener <rguenther@suse.de>
|
2017-03-08 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
PR tree-optimization/79920
|
PR tree-optimization/79920
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
/* { dg-do run } */
|
||||||
|
/* { dg-options "-O2 -fsplit-loops -fdump-tree-lsplit-details" } */
|
||||||
|
/* { dg-require-effective-target int32plus } */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" void abort (void);
|
||||||
|
#else
|
||||||
|
extern void abort (void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int n;
|
||||||
|
} region_t;
|
||||||
|
|
||||||
|
void set (region_t *region) __attribute__((noinline));
|
||||||
|
void doit (region_t *beg, region_t *end, region_t *limit)
|
||||||
|
__attribute__((noinline));
|
||||||
|
|
||||||
|
region_t regions[10];
|
||||||
|
|
||||||
|
void
|
||||||
|
set (region_t *region) {
|
||||||
|
region->n = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
doit (region_t *beg, region_t *end, region_t *limit) {
|
||||||
|
for (region_t *cur = beg; cur < end; cur++) {
|
||||||
|
if (cur < limit) {
|
||||||
|
set(cur);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main (void) {
|
||||||
|
doit(®ions[0], ®ions[2], ®ions[10]);
|
||||||
|
if (regions[1].n != 1)
|
||||||
|
abort();
|
||||||
|
}
|
|
@ -436,7 +436,6 @@ compute_new_first_bound (gimple_seq *stmts, struct tree_niter_desc *niter,
|
||||||
if (POINTER_TYPE_P (TREE_TYPE (guard_init)))
|
if (POINTER_TYPE_P (TREE_TYPE (guard_init)))
|
||||||
{
|
{
|
||||||
enddiff = gimple_convert (stmts, sizetype, enddiff);
|
enddiff = gimple_convert (stmts, sizetype, enddiff);
|
||||||
enddiff = gimple_build (stmts, NEGATE_EXPR, sizetype, enddiff);
|
|
||||||
newbound = gimple_build (stmts, POINTER_PLUS_EXPR,
|
newbound = gimple_build (stmts, POINTER_PLUS_EXPR,
|
||||||
TREE_TYPE (guard_init),
|
TREE_TYPE (guard_init),
|
||||||
guard_init, enddiff);
|
guard_init, enddiff);
|
||||||
|
|
Loading…
Reference in New Issue