On Mon, Jan 14, 2019 at 9:20 AM Andi Kleen <a...@firstfloor.org> wrote: > > From: Andi Kleen <a...@linux.intel.com> > > Bin cheng pointed out that the autofdo tests are unstable because they > don't have enough iterations for the perf sampling to get enough data. > > Increase the iterations, but only for autofdo. This avoids any impact > on targets that use a slow emulator, which will never run the host > only autofdo tests.
Can you instead use sth like AFDO_ITER_FACTOR #defined to 1 if not defined? > gcc/testsuite/: > > 2019-01-14 Andi Kleen <a...@linux.intel.com> > > * g++.dg/tree-prof/morefunc.C (ITER): Add. > (test1): Use. > (test2): Use. > * gcc.dg/tree-prof/cold_partition_label.c (ITER): Add. > (main): Use. > * gcc.dg/tree-prof/crossmodule-indircall-1.c (ITER): Add. > (main): Use > * gcc.dg/tree-prof/indir-call-prof.c (ITER): Add. > (main): Use. > * gcc.dg/tree-prof/peel-1.c (ITER): Add. > (t): Use. > (main): Use. > * gcc.dg/tree-prof/pr52027.c (ITER): Add. > (main): Use. > * gcc.dg/tree-prof/tracer-1.c (ITER): Add. > (main): Use. > * gcc.dg/tree-prof/unroll-1.c (ITER): Add. > (t): Use. > (main): Use. > * gcc.dg/tree-prof/update-cunroll-2.c (ITER): Add. > (main): Use. > * lib/profopt.exp: Pass -DITER to autofdo compilations. > --- > gcc/testsuite/g++.dg/tree-prof/morefunc.C | 8 ++++++-- > gcc/testsuite/gcc.dg/tree-prof/cold_partition_label.c | 6 +++++- > .../gcc.dg/tree-prof/crossmodule-indircall-1.c | 10 +++++++--- > gcc/testsuite/gcc.dg/tree-prof/indir-call-prof.c | 6 +++++- > gcc/testsuite/gcc.dg/tree-prof/peel-1.c | 10 +++++++--- > gcc/testsuite/gcc.dg/tree-prof/pr52027.c | 6 +++++- > gcc/testsuite/gcc.dg/tree-prof/tracer-1.c | 7 ++++++- > gcc/testsuite/gcc.dg/tree-prof/unroll-1.c | 10 +++++++--- > gcc/testsuite/gcc.dg/tree-prof/update-cunroll-2.c | 8 ++++++-- > gcc/testsuite/lib/profopt.exp | 4 ++-- > 10 files changed, 56 insertions(+), 19 deletions(-) > > diff --git a/gcc/testsuite/g++.dg/tree-prof/morefunc.C > b/gcc/testsuite/g++.dg/tree-prof/morefunc.C > index a9bdc167f45..02b01c073e9 100644 > --- a/gcc/testsuite/g++.dg/tree-prof/morefunc.C > +++ b/gcc/testsuite/g++.dg/tree-prof/morefunc.C > @@ -2,6 +2,10 @@ > #include "reorder_class1.h" > #include "reorder_class2.h" > > +#ifndef ITER > +#define ITER 1000 > +#endif > + > int g; > > #ifdef _PROFILE_USE > @@ -19,7 +23,7 @@ static __attribute__((always_inline)) > void test1 (A *tc) > { > int i; > - for (i = 0; i < 1000; i++) > + for (i = 0; i < ITER; i++) > g += tc->foo(); > if (g<100) g++; > } > @@ -28,7 +32,7 @@ static __attribute__((always_inline)) > void test2 (B *tc) > { > int i; > - for (i = 0; i < 1000000; i++) > + for (i = 0; i < ITER; i++) > g += tc->foo(); > } > > diff --git a/gcc/testsuite/gcc.dg/tree-prof/cold_partition_label.c > b/gcc/testsuite/gcc.dg/tree-prof/cold_partition_label.c > index 450308d6407..099069da6a7 100644 > --- a/gcc/testsuite/gcc.dg/tree-prof/cold_partition_label.c > +++ b/gcc/testsuite/gcc.dg/tree-prof/cold_partition_label.c > @@ -9,6 +9,10 @@ const char *sarr[SIZE]; > const char *buf_hot; > const char *buf_cold; > > +#ifndef ITER > +#define ITER 1000000 > +#endif > + > __attribute__((noinline)) > void > foo (int path) > @@ -32,7 +36,7 @@ main (int argc, char *argv[]) > int i; > buf_hot = "hello"; > buf_cold = "world"; > - for (i = 0; i < 1000000; i++) > + for (i = 0; i < ITER; i++) > foo (argc); > return 0; > } > diff --git a/gcc/testsuite/gcc.dg/tree-prof/crossmodule-indircall-1.c > b/gcc/testsuite/gcc.dg/tree-prof/crossmodule-indircall-1.c > index 58109d54dc7..32d22c69c6c 100644 > --- a/gcc/testsuite/gcc.dg/tree-prof/crossmodule-indircall-1.c > +++ b/gcc/testsuite/gcc.dg/tree-prof/crossmodule-indircall-1.c > @@ -2,6 +2,10 @@ > /* { dg-additional-sources "crossmodule-indircall-1a.c" } */ > /* { dg-options "-O3 -flto -DDOJOB=1" } */ > > +#ifndef ITER > +#define ITER 1000 > +#endif > + > int a; > extern void (*p[2])(int n); > void abort (void); > @@ -10,12 +14,12 @@ main() > { int i; > > /* This call shall be converted. */ > - for (i = 0;i<1000;i++) > + for (i = 0;i<ITER;i++) > p[0](1); > /* This call shall not be converted. */ > - for (i = 0;i<1000;i++) > + for (i = 0;i<ITER;i++) > p[i%2](2); > - if (a != 1000) > + if (a != ITER) > abort (); > > return 0; > diff --git a/gcc/testsuite/gcc.dg/tree-prof/indir-call-prof.c > b/gcc/testsuite/gcc.dg/tree-prof/indir-call-prof.c > index 53063c3e7fa..8b9dfbb78c7 100644 > --- a/gcc/testsuite/gcc.dg/tree-prof/indir-call-prof.c > +++ b/gcc/testsuite/gcc.dg/tree-prof/indir-call-prof.c > @@ -1,5 +1,9 @@ > /* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile > -fdump-ipa-afdo" } */ > > +#ifndef ITER > +#define ITER 100000 > +#endif > + > static int a1 (void) > { > return 10; > @@ -28,7 +32,7 @@ main (void) > int (*p) (void); > int i; > > - for (i = 0; i < 10000000; i ++) > + for (i = 0; i < ITER*100; i++) > { > setp (&p, i); > p (); > diff --git a/gcc/testsuite/gcc.dg/tree-prof/peel-1.c > b/gcc/testsuite/gcc.dg/tree-prof/peel-1.c > index 7245b68c1ee..b6ed178e1ad 100644 > --- a/gcc/testsuite/gcc.dg/tree-prof/peel-1.c > +++ b/gcc/testsuite/gcc.dg/tree-prof/peel-1.c > @@ -1,13 +1,17 @@ > /* { dg-options "-O3 -fdump-tree-cunroll-details -fno-unroll-loops > -fpeel-loops" } */ > void abort(); > > -int a[1000]; > +#ifndef ITER > +#define ITER 1000 > +#endif > + > +int a[ITER]; > int > __attribute__ ((noinline)) > t() > { > int i; > - for (i=0;i<1000;i++) > + for (i=0;i<ITER;i++) > if (!a[i]) > return 1; > abort (); > @@ -16,7 +20,7 @@ int > main() > { > int i; > - for (i=0;i<1000;i++) > + for (i=0;i<ITER;i++) > t(); > return 0; > } > diff --git a/gcc/testsuite/gcc.dg/tree-prof/pr52027.c > b/gcc/testsuite/gcc.dg/tree-prof/pr52027.c > index c46a14b2e86..bf2a83a336d 100644 > --- a/gcc/testsuite/gcc.dg/tree-prof/pr52027.c > +++ b/gcc/testsuite/gcc.dg/tree-prof/pr52027.c > @@ -2,6 +2,10 @@ > /* { dg-require-effective-target freorder } */ > /* { dg-options "-O2 -freorder-blocks-and-partition -fno-reorder-functions" > } */ > > +#ifndef ITER > +#define ITER 1000 > +#endif > + > void > foo (int len) > { > @@ -13,7 +17,7 @@ int > main () > { > int i; > - for (i = 0; i < 1000; i++) > + for (i = 0; i < ITER; i++) > foo (8); > return 0; > } > diff --git a/gcc/testsuite/gcc.dg/tree-prof/tracer-1.c > b/gcc/testsuite/gcc.dg/tree-prof/tracer-1.c > index 1e64f284ac0..65570a5e96d 100644 > --- a/gcc/testsuite/gcc.dg/tree-prof/tracer-1.c > +++ b/gcc/testsuite/gcc.dg/tree-prof/tracer-1.c > @@ -1,9 +1,14 @@ > /* { dg-options "-O2 -ftracer -fdump-tree-tracer" } */ > + > +#ifndef ITER > +#define ITER 1000 > +#endif > + > volatile int a, b, c; > int main () > { > int i; > - for (i = 0; i < 1000; i++) > + for (i = 0; i < ITER; i++) > { > if (i % 17) > a++; > diff --git a/gcc/testsuite/gcc.dg/tree-prof/unroll-1.c > b/gcc/testsuite/gcc.dg/tree-prof/unroll-1.c > index 3ad0cf019b3..3027e75a241 100644 > --- a/gcc/testsuite/gcc.dg/tree-prof/unroll-1.c > +++ b/gcc/testsuite/gcc.dg/tree-prof/unroll-1.c > @@ -1,13 +1,17 @@ > /* { dg-options "-O3 -fdump-rtl-loop2_unroll-details -funroll-loops > -fno-peel-loops" } */ > void abort (); > > -int a[1000]; > +#ifndef ITER > +#define ITER 1000 > +#endif > + > +int a[ITER]; > int > __attribute__ ((noinline)) > t() > { > int i; > - for (i=0;i<1000;i++) > + for (i=0;i<ITER;i++) > if (!a[i]) > return 1; > abort (); > @@ -16,7 +20,7 @@ int > main() > { > int i; > - for (i=0;i<1000;i++) > + for (i=0;i<ITER;i++) > t(); > return 0; > } > diff --git a/gcc/testsuite/gcc.dg/tree-prof/update-cunroll-2.c > b/gcc/testsuite/gcc.dg/tree-prof/update-cunroll-2.c > index c286816cdf8..de2d03ebaee 100644 > --- a/gcc/testsuite/gcc.dg/tree-prof/update-cunroll-2.c > +++ b/gcc/testsuite/gcc.dg/tree-prof/update-cunroll-2.c > @@ -1,5 +1,9 @@ > - > /* { dg-options "-O2 -fdump-tree-optimized-blocks" } */ > + > +#ifndef ITER > +#define ITER 1000 > +#endif > + > int a[8]; > __attribute__ ((noinline)) > int t() > @@ -14,7 +18,7 @@ int > main () > { > int i; > - for (i = 0; i < 1000; i++) > + for (i = 0; i < ITER; i++) > t (); > return 0; > } > diff --git a/gcc/testsuite/lib/profopt.exp b/gcc/testsuite/lib/profopt.exp > index 65494cfd4f6..13e7828bf32 100644 > --- a/gcc/testsuite/lib/profopt.exp > +++ b/gcc/testsuite/lib/profopt.exp > @@ -289,8 +289,8 @@ proc auto-profopt-execute { src } { > return > } > set profile_wrapper [profopt-perf-wrapper] > - set profile_option "-g" > - set feedback_option "-fauto-profile" > + set profile_option "-g -DITER=1000000" > + set feedback_option "-fauto-profile -DITER=1000000" > set run_autofdo 1 > profopt-execute $src > unset profile_wrapper > -- > 2.19.1 >