diff options
Diffstat (limited to 'gcc/testsuite/gcc.dg')
39 files changed, 1301 insertions, 3 deletions
diff --git a/gcc/testsuite/gcc.dg/autopar/runtime-auto.c b/gcc/testsuite/gcc.dg/autopar/runtime-auto.c new file mode 100644 index 0000000..c1a3131 --- /dev/null +++ b/gcc/testsuite/gcc.dg/autopar/runtime-auto.c @@ -0,0 +1,53 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -ftree-parallelize-loops -fdump-tree-parloops2-details" } */ + +void abort (void); + +#define N 1000 + +int a[N], b[N], c[N]; + +void +test_parallel_loop (void) +{ + int i; + + /* This loop should be auto-parallelized when -ftree-parallelize-loops + (without =number) is used for runtime thread detection via OMP_NUM_THREADS. */ + for (i = 0; i < N; i++) + a[i] = b[i] + c[i]; +} + +int +main (void) +{ + int i; + + for (i = 0; i < N; i++) + { + b[i] = i; + c[i] = i * 2; + } + + test_parallel_loop (); + + for (i = 0; i < N; i++) + { + if (a[i] != b[i] + c[i]) + abort (); + } + + return 0; +} + +/* Check that the loop is parallelized with runtime thread detection. */ +/* { dg-final { scan-tree-dump "parallelizing" "parloops2" } } */ + +/* Check that "#pragma omp parallel" is generated. */ +/* { dg-final { scan-tree-dump "pragma omp parallel" "parloops2" } } */ + +/* Check that instead of generating a num_threads(x) clause, the compiler calls + "__builtin_omp_get_num_threads" that will set the number of threads at + program execution time. */ +/* { dg-final { scan-tree-dump "__builtin_omp_get_num_threads" "parloops2" } } */ + diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_graphs.cc b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_graphs.cc index 7398a29..8ba576e 100644 --- a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_graphs.cc +++ b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_graphs.cc @@ -210,9 +210,8 @@ report_diag_with_graphs (location_t loc) g->set_description (desc); auto a = std::make_unique<diagnostic_node> (*g, "a"); auto b = std::make_unique<diagnostic_node> (*g, "b"); -#define KEY_PREFIX "/placeholder-prefix/" - b->set_attr (KEY_PREFIX, "color", "red"); -#undef KEY_PREFIX + const json::string_property color ("/placeholder-prefix/color"); + b->set_property (color, "red"); auto c = std::make_unique<diagnostic_node> (*g, "c"); c->set_label ("I am a node label"); diff --git a/gcc/testsuite/gcc.dg/pr121468.c b/gcc/testsuite/gcc.dg/pr121468.c new file mode 100644 index 0000000..07df274 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr121468.c @@ -0,0 +1,30 @@ +/* { dg-do compile } */ +/* { dg-options "-Os" } */ +int e, f, n; +static int a () { return e; } +void b () { while (a()); } +static int d () { return e; } +static void g (int h) { + if (e) + c: + if (d()) + goto i; + do { + if (f) + goto c; + goto k; + i: + h = 2147483647; + k: + e = 2147483646; + e = 6 + e; + do { + b (); + } while (1784828957 / f + e + (808 + h) > 0); + } while (1 % h); +} +void m () { g (-2); } +int main () { + if (n) + g (-1); +} diff --git a/gcc/testsuite/gcc.dg/pr122200.c b/gcc/testsuite/gcc.dg/pr122200.c new file mode 100644 index 0000000..cd770fc --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr122200.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ +/* { dg-additional-options "-mavx" { target { x86_64-*-* i?86-*-* } } } */ + + +int a, b; + +void f(float g[][5]) { + int c; + + for (c = 0; c != a; c++) + g[1][c] = c; + + for (int d; d; d++) + for (int e = 1; e != b; e++) { + for (c = 0; c != a; c++) { + g[0][1] = 1; + + if (g[1][c]) + g[1][c] = 1; + } + } +} diff --git a/gcc/testsuite/gcc.dg/torture/int-bwise-opt-1.c b/gcc/testsuite/gcc.dg/torture/int-bwise-opt-1.c new file mode 100644 index 0000000..ceea95b --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/int-bwise-opt-1.c @@ -0,0 +1,32 @@ +/* { dg-do compile } */ + +/* PR tree-optimization/122296 */ + +typedef unsigned type1; +typedef unsigned __attribute__((vector_size(sizeof(unsigned) ))) type2; +type1 g(type1 a, type1 b) +{ + type1 c = a == b; + type1 d = (a|b) == 0; + return c & d; +} + +type1 f(type1 a, type1 b) +{ + type1 c = a != b; + type1 d = (a|b) != 0; + return c | d; +} +type2 g2(type2 a, type2 b) +{ + type2 c = a == b; + type2 d = (a|b) == 0; + return c & d; +} + +type2 f2(type2 a, type2 b) +{ + type2 c = a != b; + type2 d = (a|b) != 0; + return c | d; +} diff --git a/gcc/testsuite/gcc.dg/tree-ssa/int-bwise-opt-vect01.c b/gcc/testsuite/gcc.dg/tree-ssa/int-bwise-opt-vect01.c new file mode 100644 index 0000000..bdcdbcc --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/int-bwise-opt-vect01.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-O1 -fdump-tree-forwprop1 -fdump-tree-optimized" } */ + +/* PR tree-optimization/122296 */ + +typedef unsigned type1 __attribute__((vector_size(sizeof(unsigned)))); + +type1 f(type1 a, type1 b) +{ + type1 c = a == b; + type1 d = (a|b) != 0; + return c | d; +} + +/* { dg-final { scan-tree-dump-not "VEC_COND_EXPR " "optimized" } } */ +/* { dg-final { scan-tree-dump-not "VEC_COND_EXPR " "forwprop1" } } */ + diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vla-1.c b/gcc/testsuite/gcc.dg/tree-ssa/vla-1.c new file mode 100644 index 0000000..37b7514 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/vla-1.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized -fdump-tree-cddce1-details" } */ +/* PR tree-optimization/122037 */ + +void bar1 (char *, int) __attribute__((noreturn)); +void foo1 (int size) +{ + char temp[size]; + temp[size-1] = '\0'; + bar1 (temp, size); +} + +/* The call to __builtin_stack_save should have been removed. */ +/* { dg-final { scan-tree-dump "Deleting : __builtin_stack_save" "cddce1" } } */ +/* { dg-final { scan-tree-dump-not "__builtin_stack_save " "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-ceil-div-2.c b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-div-2.c new file mode 100644 index 0000000..7078776 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-div-2.c @@ -0,0 +1,29 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + +TEST_FN(__CEIL_DIV, 2, div) + +int main (void) +{ + check_vect (); + int *a = (int*)&arr; + init_arr(a, N); + div(a); + for (int i=0; i<N; i++) + { + int expected = cl_div (i - N/2, 2); + if (expected != a[i]) + abort(); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
\ No newline at end of file diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-ceil-div-pow2.c b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-div-pow2.c new file mode 100644 index 0000000..7aa9ae8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-div-pow2.c @@ -0,0 +1,30 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + + +TEST_FN(__CEIL_DIV, 8, div) + +int main (void) +{ + check_vect (); + int *a = (int*)&arr; + init_arr(a, N); + div(a); + for (int i=0; i<N; i++) + { + int expected = cl_div (i - N/2, 8); + if (expected != a[i]) + abort(); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
\ No newline at end of file diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-ceil-div.c b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-div.c new file mode 100644 index 0000000..6f903ff --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-div.c @@ -0,0 +1,30 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + + +TEST_FN(__CEIL_DIV, 19, div) + +int main (void) +{ + check_vect (); + int *a = (int*)&arr; + init_arr(a, N); + div(a); + for (int i=0; i<N; i++) + { + int expected = cl_div (i - N/2, 19); + if (expected != a[i]) + abort(); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
\ No newline at end of file diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-ceil-mod-2.c b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-mod-2.c new file mode 100644 index 0000000..ee6dfb9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-mod-2.c @@ -0,0 +1,30 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + + +TEST_FN(__CEIL_MOD, 2, div) + +int main (void) +{ + check_vect (); + int *a = (int*)&arr; + init_arr(a, N); + div(a); + for (int i=0; i<N; i++) + { + int expected = cl_mod (i - N/2, 2); + if (expected != a[i]) + abort(); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
\ No newline at end of file diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-ceil-mod-pow2.c b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-mod-pow2.c new file mode 100644 index 0000000..de409ea --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-mod-pow2.c @@ -0,0 +1,30 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + + +TEST_FN(__CEIL_MOD, 8, div) + +int main (void) +{ + check_vect (); + unsigned int *a = (unsigned int*)&arr; + init_arr(a, N); + div(a); + for (int i=0; i<N; i++) + { + unsigned int expected = cl_mod (i - N/2, 8); + if (expected != a[i]) + abort(); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
\ No newline at end of file diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-ceil-mod.c b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-mod.c new file mode 100644 index 0000000..f2ba936 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-mod.c @@ -0,0 +1,30 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + + +TEST_FN(__CEIL_MOD, 19, div) + +int main (void) +{ + check_vect (); + int *a = (int*)&arr; + init_arr(a, N); + div(a); + for (int i=0; i<N; i++) + { + int expected = cl_mod (i - N/2, 19); + if (expected != a[i]) + abort(); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
\ No newline at end of file diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-ceil-udiv-2.c b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-udiv-2.c new file mode 100644 index 0000000..db1f797 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-udiv-2.c @@ -0,0 +1,29 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + +TEST_FN_UNSIGNED(__CEIL_DIV, 2u, udiv) + +int main (void) +{ + check_vect (); + unsigned int *ua = (unsigned int*)↑ + init_uarr(ua, N); + udiv(ua); + for (int i=0; i<N; i++) + { + unsigned int expected = cl_udiv (0xf0000000 + i, 2); + if (expected != ua[i]) + abort(); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
\ No newline at end of file diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-ceil-udiv-pow2.c b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-udiv-pow2.c new file mode 100644 index 0000000..06b4257 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-udiv-pow2.c @@ -0,0 +1,29 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + +TEST_FN_UNSIGNED(__CEIL_DIV, 8u, udiv) + +int main (void) +{ + check_vect (); + unsigned int *ua = (unsigned int*)↑ + init_uarr(ua, N); + udiv(ua); + for (int i=0; i<N; i++) + { + unsigned int expected = cl_udiv (0xf0000000 + i, 8); + if (expected != ua[i]) + abort(); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
\ No newline at end of file diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-ceil-udiv.c b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-udiv.c new file mode 100644 index 0000000..ef6e856 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-udiv.c @@ -0,0 +1,29 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + +TEST_FN_UNSIGNED(__CEIL_DIV, 19u, udiv) + +int main (void) +{ + check_vect (); + unsigned int *ua = (unsigned int*)↑ + init_uarr(ua, N); + udiv(ua); + for (int i=0; i<N; i++) + { + unsigned int expected = cl_udiv (0xf0000000 + i, 19); + if (expected != ua[i]) + abort(); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
\ No newline at end of file diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-ceil-umod-2.c b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-umod-2.c new file mode 100644 index 0000000..2d0a5db --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-umod-2.c @@ -0,0 +1,30 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + + +TEST_FN_UNSIGNED (__CEIL_MOD, 2u, mod) + +int main (void) +{ + check_vect (); + unsigned int *a = (unsigned int*)↑ + init_uarr(a, N); + mod(a); + for (int i=0; i<N; i++) + { + unsigned int expected = cl_umod (0xf0000000 + i, 2); + if (expected != a[i]) + abort(); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
\ No newline at end of file diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-ceil-umod-pow2.c b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-umod-pow2.c new file mode 100644 index 0000000..2d0a5db --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-umod-pow2.c @@ -0,0 +1,30 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + + +TEST_FN_UNSIGNED (__CEIL_MOD, 2u, mod) + +int main (void) +{ + check_vect (); + unsigned int *a = (unsigned int*)↑ + init_uarr(a, N); + mod(a); + for (int i=0; i<N; i++) + { + unsigned int expected = cl_umod (0xf0000000 + i, 2); + if (expected != a[i]) + abort(); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
\ No newline at end of file diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-ceil-umod.c b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-umod.c new file mode 100644 index 0000000..949a509 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-ceil-umod.c @@ -0,0 +1,30 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + + +TEST_FN_UNSIGNED (__CEIL_MOD, 19u, mod) + +int main (void) +{ + check_vect (); + unsigned int *a = (unsigned int*)↑ + init_uarr(a, N); + mod(a); + for (int i=0; i<N; i++) + { + unsigned int expected = cl_umod (0xf0000000 + i, 19); + if (expected != a[i]) + abort(); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
\ No newline at end of file diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-floor-div-2.c b/gcc/testsuite/gcc.dg/vect/pr104116-floor-div-2.c new file mode 100644 index 0000000..d93e051 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-floor-div-2.c @@ -0,0 +1,30 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + +TEST_FN(__FLOOR_DIV, 2, div_2) + +int main (void) +{ + check_vect (); + int * a = (int*)&arr; + init_arr(a, N); + div_2(a); + for (int i=0; i<N; i++) + { + int expected = fl_div (i - N/2, 2); + if (expected != a[i]) + abort (); + } + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ + + diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-floor-div-pow2.c b/gcc/testsuite/gcc.dg/vect/pr104116-floor-div-pow2.c new file mode 100644 index 0000000..9e986a7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-floor-div-pow2.c @@ -0,0 +1,30 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + +TEST_FN(__FLOOR_DIV, 8, div_2) + +int main (void) +{ + check_vect (); + int * a = (int*)&arr; + init_arr(a, N); + div_2(a); + for (int i=0; i<N; i++) + { + int expected = fl_div (i - N/2, 8); + if (expected != a[i]) + abort (); + } + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ + + diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-floor-div.c b/gcc/testsuite/gcc.dg/vect/pr104116-floor-div.c new file mode 100644 index 0000000..89dd270 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-floor-div.c @@ -0,0 +1,30 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + +TEST_FN(__FLOOR_DIV, 19, div_2) + +int main (void) +{ + check_vect (); + int * a = (int*)&arr; + init_arr(a, N); + div_2(a); + for (int i=0; i<N; i++) + { + int expected = fl_div (i - N/2, 19); + if (expected != a[i]) + abort (); + } + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ + + diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-floor-mod-2.c b/gcc/testsuite/gcc.dg/vect/pr104116-floor-mod-2.c new file mode 100644 index 0000000..0c5c162 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-floor-mod-2.c @@ -0,0 +1,31 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + +TEST_FN(__FLOOR_MOD, 2, mod) + +int main (void) +{ + check_vect (); + int * a = (int*)&arr; + init_arr(a, N); + mod(a); + for (int i=0; i<N; i++) + { + int expected = fl_mod (i - N/2, 2); + if (expected != a[i]) + abort (); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ + + diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-floor-mod-pow2.c b/gcc/testsuite/gcc.dg/vect/pr104116-floor-mod-pow2.c new file mode 100644 index 0000000..f3de145 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-floor-mod-pow2.c @@ -0,0 +1,31 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + +TEST_FN(__FLOOR_MOD, 8, mod) + +int main (void) +{ + check_vect (); + int * a = (int*)&arr; + init_arr(a, N); + mod(a); + for (int i=0; i<N; i++) + { + int expected = fl_mod (i - N/2, 8); + if (expected != a[i]) + abort (); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ + + diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-floor-mod.c b/gcc/testsuite/gcc.dg/vect/pr104116-floor-mod.c new file mode 100644 index 0000000..3e6bbe9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-floor-mod.c @@ -0,0 +1,31 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + +TEST_FN(__FLOOR_MOD, 19, mod) + +int main (void) +{ + check_vect (); + int * a = (int*)&arr; + init_arr(a, N); + mod(a); + for (int i=0; i<N; i++) + { + int expected = fl_mod (i - N/2, 19); + if (expected != a[i]) + abort (); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ + + diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-round-div-2.c b/gcc/testsuite/gcc.dg/vect/pr104116-round-div-2.c new file mode 100644 index 0000000..c242ccb --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-round-div-2.c @@ -0,0 +1,31 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + +TEST_FN(__ROUND_DIV, 2, div) + +int main (void) +{ + check_vect (); + int * a = (int*)&arr; + init_arr(a, N); + div(a); + for (int i=0; i<N; i++) + { + int expected = rd_div (i - N/2, 2); + if (expected != a[i]) + abort (); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ + + diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-round-div-pow2.c b/gcc/testsuite/gcc.dg/vect/pr104116-round-div-pow2.c new file mode 100644 index 0000000..365c2c59 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-round-div-pow2.c @@ -0,0 +1,31 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + +TEST_FN(__ROUND_DIV, 8, div) + +int main (void) +{ + check_vect (); + int * a = (int*)&arr; + init_arr(a, N); + div(a); + for (int i=0; i<N; i++) + { + int expected = rd_div (i - N/2, 8); + if (expected != a[i]) + abort (); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ + + diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-round-div.c b/gcc/testsuite/gcc.dg/vect/pr104116-round-div.c new file mode 100644 index 0000000..5c377d1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-round-div.c @@ -0,0 +1,31 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + +TEST_FN(__ROUND_DIV, 19, div) + +int main (void) +{ + check_vect (); + int * a = (int*)&arr; + init_arr(a, N); + div(a); + for (int i=0; i<N; i++) + { + int expected = rd_div (i - N/2, 19); + if (expected != a[i]) + abort(); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ + + diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-round-mod-2.c b/gcc/testsuite/gcc.dg/vect/pr104116-round-mod-2.c new file mode 100644 index 0000000..6430b3e --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-round-mod-2.c @@ -0,0 +1,31 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + +TEST_FN(__ROUND_MOD, 2, mod) + +int main (void) +{ + check_vect (); + int * a = (int*)&arr; + init_arr(a, N); + mod(a); + for (int i=0; i<N; i++) + { + int expected = rd_mod (i - N/2, 2); + if (expected != a[i]) + abort (); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ + + diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-round-mod-pow2.c b/gcc/testsuite/gcc.dg/vect/pr104116-round-mod-pow2.c new file mode 100644 index 0000000..46c1789 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-round-mod-pow2.c @@ -0,0 +1,31 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + +TEST_FN(__ROUND_MOD, 8, mod) + +int main (void) +{ + check_vect (); + int * a = (int*)&arr; + init_arr(a, N); + mod(a); + for (int i=0; i<N; i++) + { + int expected = rd_mod (i - N/2, 8); + if (expected != a[i]) + abort (); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ + + diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-round-mod.c b/gcc/testsuite/gcc.dg/vect/pr104116-round-mod.c new file mode 100644 index 0000000..e7ca44e --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-round-mod.c @@ -0,0 +1,31 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + +TEST_FN(__ROUND_MOD, 19, mod) + +int main (void) +{ + check_vect (); + int * a = (int*)&arr; + init_arr(a, N); + mod(a); + for (int i=0; i<N; i++) + { + int expected = rd_mod (i - N/2, 19); + if (expected != a[i]) + abort (); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ + + diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-round-udiv-2.c b/gcc/testsuite/gcc.dg/vect/pr104116-round-udiv-2.c new file mode 100644 index 0000000..4d42f4e --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-round-udiv-2.c @@ -0,0 +1,31 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + +TEST_FN_UNSIGNED(__ROUND_DIV, 2u, div) + +int main (void) +{ + check_vect (); + unsigned int * a = (unsigned int*)↑ + init_uarr(a, N); + div(a); + for (unsigned int i=0; i<N; i++) + { + unsigned int expected = rd_udiv (0xf0000000 + i, 2); + if (expected != a[i]) + abort (); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ + + diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-round-udiv-pow2.c b/gcc/testsuite/gcc.dg/vect/pr104116-round-udiv-pow2.c new file mode 100644 index 0000000..137b249 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-round-udiv-pow2.c @@ -0,0 +1,31 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + +TEST_FN_UNSIGNED(__ROUND_DIV, 8u, div) + +int main (void) +{ + check_vect (); + unsigned int * a = (unsigned int*)↑ + init_uarr(a, N); + div(a); + for (unsigned int i=0; i<N; i++) + { + unsigned int expected = rd_udiv (0xf0000000 + i, 8); + if (expected != a[i]) + abort (); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ + + diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-round-udiv.c b/gcc/testsuite/gcc.dg/vect/pr104116-round-udiv.c new file mode 100644 index 0000000..183a930 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-round-udiv.c @@ -0,0 +1,32 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + +TEST_FN_UNSIGNED(__ROUND_DIV, 19u, div) + +int main (void) +{ + check_vect (); + unsigned int * a = (unsigned int*)↑ + init_uarr(a, N); + div(a); + for (unsigned int i=0; i<N; i++) + { + unsigned int expected = rd_udiv (0xf0000000 + i, 19); + if (expected != a[i]) + abort (); + + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ + + diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-round-umod-2.c b/gcc/testsuite/gcc.dg/vect/pr104116-round-umod-2.c new file mode 100644 index 0000000..f321e0e --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-round-umod-2.c @@ -0,0 +1,31 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + +TEST_FN_UNSIGNED(__ROUND_MOD, 2u, mod) + +int main (void) +{ + check_vect (); + unsigned int * a = (unsigned int*)↑ + init_uarr(a, N); + mod(a); + for (unsigned int i=0; i<N; i++) + { + unsigned int expected = rd_umod (0xf0000000 + i, 2); + if (expected != a[i]) + abort (); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ + + diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-round-umod-pow2.c b/gcc/testsuite/gcc.dg/vect/pr104116-round-umod-pow2.c new file mode 100644 index 0000000..041ecd1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-round-umod-pow2.c @@ -0,0 +1,31 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + +TEST_FN_UNSIGNED(__ROUND_MOD, 8u, mod) + +int main (void) +{ + check_vect (); + unsigned int * a = (unsigned int*)↑ + init_uarr(a, N); + mod(a); + for (unsigned int i=0; i<N; i++) + { + unsigned int expected = rd_umod (0xf0000000 + i, 8); + if (expected != a[i]) + abort (); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ + + diff --git a/gcc/testsuite/gcc.dg/vect/pr104116-round-umod.c b/gcc/testsuite/gcc.dg/vect/pr104116-round-umod.c new file mode 100644 index 0000000..b5ddad1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116-round-umod.c @@ -0,0 +1,31 @@ +/* { dg-additional-options "-fgimple -fdump-tree-optimized" } */ +/* { dg-require-effective-target vect_int} */ +/* { dg-require-effective-target vect_condition} */ +/* { dg-require-effective-target vect_shift} */ + + + +#include "pr104116.h" +#include "tree-vect.h" + +TEST_FN_UNSIGNED(__ROUND_MOD, 19u, mod) + +int main (void) +{ + check_vect (); + unsigned int * a = (unsigned int*)↑ + init_uarr(a, N); + mod(a); + for (unsigned int i=0; i<N; i++) + { + unsigned int expected = rd_umod (0xf0000000 + i, 19); + if (expected != a[i]) + abort (); + } + + return 0; +} + +/* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */ + + diff --git a/gcc/testsuite/gcc.dg/vect/pr104116.h b/gcc/testsuite/gcc.dg/vect/pr104116.h new file mode 100644 index 0000000..6f14e4b --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr104116.h @@ -0,0 +1,201 @@ +#define TEST_FN(OP, CONST, NAME) \ +__attribute__((noinline)) \ +void __GIMPLE (ssa,guessed_local(10737416)) \ +NAME (int * a) \ +{ \ + int i; \ + long unsigned int _1; \ + long unsigned int _2; \ + int * _3; \ + int _4; \ + int _5; \ + unsigned int _12; \ + unsigned int _13; \ + \ + __BB(2,guessed_local(10737416)): \ + goto __BB3(precise(134217728)); \ + \ + __BB(3,loop_header(1),guessed_local(1063004408)): \ + i_14 = __PHI (__BB5: i_11, __BB2: 0); \ + _13 = __PHI (__BB5: _12, __BB2: 1024u); \ + _1 = (long unsigned int) i_14; \ + _2 = _1 * 4ul; \ + _3 = a_9(D) + _2; \ + _4 = __MEM <int> (_3); \ + _5 = _4 OP CONST; \ + __MEM <int> (_3) = _5; \ + i_11 = i_14 + 1; \ + _12 = _13 - 1u; \ + if (_12 != 0u) \ + goto __BB5(guessed(132861994)); \ + else \ + goto __BB4(guessed(1355734)); \ + \ + __BB(5,guessed_local(1052266995)): \ + goto __BB3(precise(134217728)); \ + \ + __BB(4,guessed_local(10737416)): \ + return; \ + \ +} \ + +#define TEST_FN_UNSIGNED(OP, CONST, NAME) \ +__attribute__((noinline)) \ +void __GIMPLE (ssa,guessed_local(10737416)) \ +NAME (unsigned int * a) \ +{ \ + int i; \ + long unsigned int _1; \ + long unsigned int _2; \ + unsigned int * _3; \ + unsigned int _4; \ + unsigned int _5; \ + unsigned int _12; \ + unsigned int _13; \ + \ + __BB(2,guessed_local(10737416)): \ + goto __BB3(precise(134217728)); \ + \ + __BB(3,loop_header(1),guessed_local(1063004408)): \ + i_14 = __PHI (__BB5: i_11, __BB2: 0); \ + _13 = __PHI (__BB5: _12, __BB2: 1024u); \ + _1 = (long unsigned int) i_14; \ + _2 = _1 * 4ul; \ + _3 = a_9(D) + _2; \ + _4 = __MEM <unsigned int> (_3); \ + _5 = _4 OP CONST; \ + __MEM <unsigned int> (_3) = _5; \ + i_11 = i_14 + 1; \ + _12 = _13 - 1u; \ + if (_12 != 0u) \ + goto __BB5(guessed(132861994)); \ + else \ + goto __BB4(guessed(1355734)); \ + \ + __BB(5,guessed_local(1052266995)): \ + goto __BB3(precise(134217728)); \ + \ + __BB(4,guessed_local(10737416)): \ + return; \ +} \ + + +#define N 1024 +int arr[N]; +__attribute__((optimize("O0"))) +void init_arr (int *a, int n) +{ + for (int i=0; i<n; i++) + a[i] = i - n/2; +} + +unsigned int uarr[N]; +__attribute__((optimize("O0"))) +void init_uarr (unsigned int *a, int n) +{ + for (unsigned int i=0; i<n; i++) + a[i] = 0xf0000000 + i; +} + +int cl_div (int x, int y) +{ + int r = x % y; + int q = x / y; + if (r != 0 && (x ^ y) >= 0) + q++; + return q; +} + +unsigned int cl_udiv (unsigned int x, unsigned int y) +{ + unsigned int r = x % y; + unsigned int q = x / y; + if (r > 0) + q++; + return q; +} + +int cl_mod (int x, int y) +{ + int r = x % y; + if (r != 0 && (x ^ y) >= 0) + r -= y; + return r; +} + +unsigned int cl_umod (unsigned int x, unsigned int y) +{ + unsigned int r = x % y; + unsigned int q = x / y; + if (r > 0) + r-=y; + return r; +} + +int fl_div (int x, int y) +{ + int r = x % y; + int q = x / y; + if (r != 0 && (x ^ y) < 0) + q--; + return q; +} + + +int fl_mod (int x, int y) +{ + int r = x % y; + if (r != 0 && (x ^ y) < 0) + r += y; + return r; +} + +int abs(int x) +{ + if (x < 0) return -x; + return x; +} + +int rd_mod (int x, int y) +{ + int r = x % y; + if (abs(r) > abs((y-1) >> 1)) + { + if ((x ^ y) < 0) + r += y; + else + r -= y; + } + return r; +} + +int rd_div (int x, int y) +{ + int r = x % y; + int q = x / y; + if (abs(r) > abs((y-1) >> 1)) + { + if ((x ^ y) < 0) + q--; + else + q++; + } + return q; +} + +unsigned int rd_umod (unsigned int x, unsigned int y) +{ + unsigned int r = x % y; + if (r > ((y-1) >> 1)) + r -= y; + return r; +} + +unsigned int rd_udiv (unsigned int x, unsigned int y) +{ + unsigned int r = x % y; + unsigned int q = x / y; + if (r > ((y-1) >> 1)) + q++; + return q; +} diff --git a/gcc/testsuite/gcc.dg/vect/vect-pr122301.c b/gcc/testsuite/gcc.dg/vect/vect-pr122301.c new file mode 100644 index 0000000..acc7aed --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-pr122301.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ + +int get_prev_frame_segid(unsigned char *p, int n) +{ + int tem; + unsigned seg_id = 8; + for (int x = 0; x < n; x++) + { + int a = seg_id; + tem = a < p[x] ? a : p[x]; + seg_id = tem; + } + return tem; +} + +/* { dg-final { scan-tree-dump "optimized: loop vectorized" "vect" { target { vect_int && { ! vect_no_int_min_max } } } } } */ |