diff options
Diffstat (limited to 'toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106821.patch')
-rw-r--r-- | toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106821.patch | 240 |
1 files changed, 0 insertions, 240 deletions
diff --git a/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106821.patch b/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106821.patch deleted file mode 100644 index f25a37858d..0000000000 --- a/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106821.patch +++ /dev/null @@ -1,240 +0,0 @@ -2011-10-06 Ira Rosen <ira.rosen@linaro.org> - - gcc/testsuite/ - * gcc.dg/vect/bb-slp-26.c: Simplify to make the basic block - vectorizable. - - Backport from mainline: - - 2011-09-25 Ira Rosen <ira.rosen@linaro.org> - - gcc/ - * tree-vect-slp.c (vect_slp_analyze_bb_1): Split out core part - of vect_analyze_bb here. - (vect_analyze_bb): Loop over vector sizes calling vect_analyze_bb_1. - - gcc/testsuite/ - * lib/target-supports.exp (check_effective_target_vect64): New. - * gcc.dg/vect/bb-slp-11.c: Expect the error message twice in case - of multiple vector sizes. - * gcc.dg/vect/bb-slp-26.c: New. - -=== modified file 'gcc/testsuite/gcc.dg/vect/bb-slp-11.c' ---- old/gcc/testsuite/gcc.dg/vect/bb-slp-11.c 2010-11-22 12:16:52 +0000 -+++ new/gcc/testsuite/gcc.dg/vect/bb-slp-11.c 2011-10-02 10:40:34 +0000 -@@ -49,6 +49,7 @@ - } - - /* { dg-final { scan-tree-dump-times "basic block vectorized using SLP" 0 "slp" } } */ --/* { dg-final { scan-tree-dump-times "SLP with multiple types" 1 "slp" } } */ -+/* { dg-final { scan-tree-dump-times "SLP with multiple types" 1 "slp" { xfail vect_multiple_sizes } } } */ -+/* { dg-final { scan-tree-dump-times "SLP with multiple types" 2 "slp" { target vect_multiple_sizes } } } */ - /* { dg-final { cleanup-tree-dump "slp" } } */ - - -=== added file 'gcc/testsuite/gcc.dg/vect/bb-slp-26.c' ---- old/gcc/testsuite/gcc.dg/vect/bb-slp-26.c 1970-01-01 00:00:00 +0000 -+++ new/gcc/testsuite/gcc.dg/vect/bb-slp-26.c 2011-10-02 10:40:34 +0000 -@@ -0,0 +1,60 @@ -+/* { dg-require-effective-target vect_int } */ -+ -+#include <stdarg.h> -+#include "tree-vect.h" -+ -+#define A 3 -+#define B 4 -+#define N 256 -+ -+char src[N], dst[N]; -+ -+void foo (char * __restrict__ dst, char * __restrict__ src, int h, -+ int stride, int dummy) -+{ -+ int i; -+ h /= 16; -+ for (i = 0; i < h; i++) -+ { -+ dst[0] += A*src[0]; -+ dst[1] += A*src[1]; -+ dst[2] += A*src[2]; -+ dst[3] += A*src[3]; -+ dst[4] += A*src[4]; -+ dst[5] += A*src[5]; -+ dst[6] += A*src[6]; -+ dst[7] += A*src[7]; -+ dst += 8; -+ src += 8; -+ if (dummy == 32) -+ abort (); -+ } -+} -+ -+ -+int main (void) -+{ -+ int i; -+ -+ check_vect (); -+ -+ for (i = 0; i < N; i++) -+ { -+ dst[i] = 0; -+ src[i] = i/8; -+ } -+ -+ foo (dst, src, N, 8, 0); -+ -+ for (i = 0; i < N/2; i++) -+ { -+ if (dst[i] != A * src[i]) -+ abort (); -+ } -+ -+ return 0; -+} -+ -+/* { dg-final { scan-tree-dump-times "basic block vectorized using SLP" 1 "slp" { target vect64 } } } */ -+/* { dg-final { cleanup-tree-dump "slp" } } */ -+ - -=== modified file 'gcc/testsuite/lib/target-supports.exp' ---- old/gcc/testsuite/lib/target-supports.exp 2011-09-20 07:54:28 +0000 -+++ new/gcc/testsuite/lib/target-supports.exp 2011-10-02 10:40:34 +0000 -@@ -3283,6 +3283,24 @@ - return $et_vect_multiple_sizes_saved - } - -+# Return 1 if the target supports vectors of 64 bits. -+ -+proc check_effective_target_vect64 { } { -+ global et_vect64 -+ -+ if [info exists et_vect64_saved] { -+ verbose "check_effective_target_vect64: using cached result" 2 -+ } else { -+ set et_vect64_saved 0 -+ if { ([istarget arm*-*-*] && [check_effective_target_arm_neon_ok]) } { -+ set et_vect64_saved 1 -+ } -+ } -+ -+ verbose "check_effective_target_vect64: returning $et_vect64_saved" 2 -+ return $et_vect64_saved -+} -+ - # Return 1 if the target supports section-anchors - - proc check_effective_target_section_anchors { } { - -=== modified file 'gcc/tree-vect-slp.c' ---- old/gcc/tree-vect-slp.c 2011-07-06 12:04:10 +0000 -+++ new/gcc/tree-vect-slp.c 2011-10-02 10:40:34 +0000 -@@ -1664,42 +1664,18 @@ - - /* Check if the basic block can be vectorized. */ - --bb_vec_info --vect_slp_analyze_bb (basic_block bb) -+static bb_vec_info -+vect_slp_analyze_bb_1 (basic_block bb) - { - bb_vec_info bb_vinfo; - VEC (ddr_p, heap) *ddrs; - VEC (slp_instance, heap) *slp_instances; - slp_instance instance; -- int i, insns = 0; -- gimple_stmt_iterator gsi; -+ int i; - int min_vf = 2; - int max_vf = MAX_VECTORIZATION_FACTOR; - bool data_dependence_in_bb = false; - -- current_vector_size = 0; -- -- if (vect_print_dump_info (REPORT_DETAILS)) -- fprintf (vect_dump, "===vect_slp_analyze_bb===\n"); -- -- for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) -- { -- gimple stmt = gsi_stmt (gsi); -- if (!is_gimple_debug (stmt) -- && !gimple_nop_p (stmt) -- && gimple_code (stmt) != GIMPLE_LABEL) -- insns++; -- } -- -- if (insns > PARAM_VALUE (PARAM_SLP_MAX_INSNS_IN_BB)) -- { -- if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS)) -- fprintf (vect_dump, "not vectorized: too many instructions in basic " -- "block.\n"); -- -- return NULL; -- } -- - bb_vinfo = new_bb_vec_info (bb); - if (!bb_vinfo) - return NULL; -@@ -1819,6 +1795,61 @@ - } - - -+bb_vec_info -+vect_slp_analyze_bb (basic_block bb) -+{ -+ bb_vec_info bb_vinfo; -+ int insns = 0; -+ gimple_stmt_iterator gsi; -+ unsigned int vector_sizes; -+ -+ if (vect_print_dump_info (REPORT_DETAILS)) -+ fprintf (vect_dump, "===vect_slp_analyze_bb===\n"); -+ -+ for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) -+ { -+ gimple stmt = gsi_stmt (gsi); -+ if (!is_gimple_debug (stmt) -+ && !gimple_nop_p (stmt) -+ && gimple_code (stmt) != GIMPLE_LABEL) -+ insns++; -+ } -+ -+ if (insns > PARAM_VALUE (PARAM_SLP_MAX_INSNS_IN_BB)) -+ { -+ if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS)) -+ fprintf (vect_dump, "not vectorized: too many instructions in basic " -+ "block.\n"); -+ -+ return NULL; -+ } -+ -+ /* Autodetect first vector size we try. */ -+ current_vector_size = 0; -+ vector_sizes = targetm.vectorize.autovectorize_vector_sizes (); -+ -+ while (1) -+ { -+ bb_vinfo = vect_slp_analyze_bb_1 (bb); -+ if (bb_vinfo) -+ return bb_vinfo; -+ -+ destroy_bb_vec_info (bb_vinfo); -+ -+ vector_sizes &= ~current_vector_size; -+ if (vector_sizes == 0 -+ || current_vector_size == 0) -+ return NULL; -+ -+ /* Try the next biggest vector size. */ -+ current_vector_size = 1 << floor_log2 (vector_sizes); -+ if (vect_print_dump_info (REPORT_DETAILS)) -+ fprintf (vect_dump, "***** Re-trying analysis with " -+ "vector size %d\n", current_vector_size); -+ } -+} -+ -+ - /* SLP costs are calculated according to SLP instance unrolling factor (i.e., - the number of created vector stmts depends on the unrolling factor). - However, the actual number of vector stmts for every SLP node depends on - |