re PR middle-end/81408 (Lots of new -Wunsafe-loop-optimizations warnings with 7 compared to 6)
PR target/81408 * tree-ssa-loop-niter.c (number_of_iterations_exit): Dump missed optimization for loop niter analysis. gcc/testsuite * g++.dg/tree-ssa/pr81408.C: New. * gcc.dg/tree-ssa/pr19210-1.c: Check dump message rather than warning. From-SVN: r250304
This commit is contained in:
parent
f94f48ffac
commit
694dd0e408
5 changed files with 112 additions and 8 deletions
|
@ -1,3 +1,9 @@
|
|||
2017-07-18 Bin Cheng <bin.cheng@arm.com>
|
||||
|
||||
PR target/81408
|
||||
* tree-ssa-loop-niter.c (number_of_iterations_exit): Dump missed
|
||||
optimization for loop niter analysis.
|
||||
|
||||
2017-07-18 Georg-Johann Lay <avr@gjlay.de>
|
||||
|
||||
PR target/81473
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2017-07-18 Bin Cheng <bin.cheng@arm.com>
|
||||
|
||||
PR target/81408
|
||||
* g++.dg/tree-ssa/pr81408.C: New.
|
||||
* gcc.dg/tree-ssa/pr19210-1.c: Check dump message rather than warning.
|
||||
|
||||
2017-07-18 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/80620
|
||||
|
|
92
gcc/testsuite/g++.dg/tree-ssa/pr81408.C
Normal file
92
gcc/testsuite/g++.dg/tree-ssa/pr81408.C
Normal file
|
@ -0,0 +1,92 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -std=gnu++11 -fopt-info-loop-missed -Wunsafe-loop-optimizations" } */
|
||||
|
||||
namespace a {
|
||||
void b () __attribute__ ((__noreturn__));
|
||||
template <typename> struct d;
|
||||
template <typename e> struct d<e *>
|
||||
{
|
||||
typedef e f;
|
||||
};
|
||||
struct g
|
||||
{
|
||||
template <typename h> using i = h *;
|
||||
};
|
||||
}
|
||||
using a::d;
|
||||
template <typename j, typename> class k
|
||||
{
|
||||
j l;
|
||||
|
||||
public:
|
||||
typename d<j>::f operator* () {}
|
||||
void operator++ () { ++l; }
|
||||
j
|
||||
aa ()
|
||||
{
|
||||
return l;
|
||||
}
|
||||
};
|
||||
template <typename m, typename n, typename ab>
|
||||
bool
|
||||
operator!= (k<m, ab> o, k<n, ab> p2)
|
||||
{
|
||||
return o.aa () != p2.aa ();
|
||||
}
|
||||
struct p;
|
||||
namespace a {
|
||||
struct F
|
||||
{
|
||||
struct q
|
||||
{
|
||||
using ai = g::i<p>;
|
||||
};
|
||||
using r = q::ai;
|
||||
};
|
||||
class H
|
||||
{
|
||||
public:
|
||||
k<F::r, int> begin ();
|
||||
k<F::r, int> end ();
|
||||
};
|
||||
int s;
|
||||
class I
|
||||
{
|
||||
public:
|
||||
void
|
||||
aq (char)
|
||||
{
|
||||
if (s)
|
||||
b ();
|
||||
}
|
||||
};
|
||||
class u : public I
|
||||
{
|
||||
public:
|
||||
void
|
||||
operator<< (u o (u))
|
||||
{
|
||||
o (*this);
|
||||
}
|
||||
u operator<< (void *);
|
||||
};
|
||||
template <typename at, typename au>
|
||||
at
|
||||
av (au o)
|
||||
{
|
||||
o.aq ('\n');
|
||||
}
|
||||
u ax;
|
||||
}
|
||||
struct p
|
||||
{
|
||||
char *ay;
|
||||
};
|
||||
a::H t;
|
||||
void
|
||||
ShowHelpListCommands ()
|
||||
{
|
||||
for (auto c : t) /* { dg-message "note: missed loop optimization: niters analysis .*" } */
|
||||
a::ax << c.ay << a::av;
|
||||
}
|
||||
|
|
@ -1,15 +1,15 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -Wunsafe-loop-optimizations" } */
|
||||
/* { dg-options "-O2 -fopt-info-loop-missed -Wunsafe-loop-optimizations" } */
|
||||
extern void g(void);
|
||||
|
||||
void
|
||||
f (unsigned n)
|
||||
{
|
||||
unsigned k;
|
||||
for(k = 0;k <= n;k++) /* { dg-warning "missed loop optimization.*overflow" } */
|
||||
for(k = 0;k <= n;k++) /* { dg-message "note: missed loop optimization: niters analysis .*" } */
|
||||
g();
|
||||
|
||||
for(k = 0;k <= n;k += 4) /* { dg-warning "missed loop optimization.*overflow" } */
|
||||
for(k = 0;k <= n;k += 4) /* { dg-message "note: missed loop optimization: niters analysis .*" } */
|
||||
g();
|
||||
|
||||
/* We used to get warning for this loop. However, since then # of iterations
|
||||
|
@ -21,9 +21,9 @@ f (unsigned n)
|
|||
g();
|
||||
|
||||
/* So we need the following loop, instead. */
|
||||
for(k = 4;k <= n;k += 5) /* { dg-warning "missed loop optimization.*overflow" } */
|
||||
for(k = 4;k <= n;k += 5) /* { dg-message "note: missed loop optimization: niters analysis .*" } */
|
||||
g();
|
||||
|
||||
for(k = 15;k >= n;k--) /* { dg-warning "missed loop optimization.*overflow" } */
|
||||
for(k = 15;k >= n;k--) /* { dg-message "note: missed loop optimization: niters analysis .*" } */
|
||||
g();
|
||||
}
|
||||
|
|
|
@ -2378,9 +2378,9 @@ number_of_iterations_exit (struct loop *loop, edge exit,
|
|||
return true;
|
||||
|
||||
if (warn)
|
||||
warning_at (gimple_location_safe (stmt),
|
||||
OPT_Wunsafe_loop_optimizations,
|
||||
"missed loop optimization, the loop counter may overflow");
|
||||
dump_printf_loc (MSG_MISSED_OPTIMIZATION, gimple_location_safe (stmt),
|
||||
"missed loop optimization: niters analysis ends up "
|
||||
"with assumptions.\n");
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue