diff options
Diffstat (limited to 'meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99528.patch')
-rw-r--r-- | meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99528.patch | 138 |
1 files changed, 0 insertions, 138 deletions
diff --git a/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99528.patch b/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99528.patch deleted file mode 100644 index 8743583065..0000000000 --- a/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99528.patch +++ /dev/null @@ -1,138 +0,0 @@ -2011-07-19 Revital Eres <revital.eres@linaro.org> - - Backport from mainline -r175090 - gcc/ - * ddg.c (add_intra_loop_mem_dep): New function. - (build_intra_loop_deps): Call it. - - gcc/testsuite - * gcc.dg/sms-9.c: New file. - -=== modified file 'gcc/ddg.c' ---- old/gcc/ddg.c 2011-05-13 16:16:22 +0000 -+++ new/gcc/ddg.c 2011-07-05 09:02:18 +0000 -@@ -352,6 +352,33 @@ - } - - -+/* Given two nodes, analyze their RTL insns and add intra-loop mem deps -+ to ddg G. */ -+static void -+add_intra_loop_mem_dep (ddg_ptr g, ddg_node_ptr from, ddg_node_ptr to) -+{ -+ -+ if ((from->cuid == to->cuid) -+ || !insn_alias_sets_conflict_p (from->insn, to->insn)) -+ /* Do not create edge if memory references have disjoint alias sets -+ or 'to' and 'from' are the same instruction. */ -+ return; -+ -+ if (mem_write_insn_p (from->insn)) -+ { -+ if (mem_read_insn_p (to->insn)) -+ create_ddg_dep_no_link (g, from, to, -+ DEBUG_INSN_P (to->insn) -+ ? ANTI_DEP : TRUE_DEP, MEM_DEP, 0); -+ else -+ create_ddg_dep_no_link (g, from, to, -+ DEBUG_INSN_P (to->insn) -+ ? ANTI_DEP : OUTPUT_DEP, MEM_DEP, 0); -+ } -+ else if (!mem_read_insn_p (to->insn)) -+ create_ddg_dep_no_link (g, from, to, ANTI_DEP, MEM_DEP, 0); -+} -+ - /* Given two nodes, analyze their RTL insns and add inter-loop mem deps - to ddg G. */ - static void -@@ -439,10 +466,22 @@ - if (DEBUG_INSN_P (j_node->insn)) - continue; - if (mem_access_insn_p (j_node->insn)) -- /* Don't bother calculating inter-loop dep if an intra-loop dep -- already exists. */ -+ { -+ /* Don't bother calculating inter-loop dep if an intra-loop dep -+ already exists. */ - if (! TEST_BIT (dest_node->successors, j)) - add_inter_loop_mem_dep (g, dest_node, j_node); -+ /* If -fmodulo-sched-allow-regmoves -+ is set certain anti-dep edges are not created. -+ It might be that these anti-dep edges are on the -+ path from one memory instruction to another such that -+ removing these edges could cause a violation of the -+ memory dependencies. Thus we add intra edges between -+ every two memory instructions in this case. */ -+ if (flag_modulo_sched_allow_regmoves -+ && !TEST_BIT (dest_node->predecessors, j)) -+ add_intra_loop_mem_dep (g, j_node, dest_node); -+ } - } - } - } - -=== added file 'gcc/testsuite/gcc.dg/sms-9.c' ---- old/gcc/testsuite/gcc.dg/sms-9.c 1970-01-01 00:00:00 +0000 -+++ new/gcc/testsuite/gcc.dg/sms-9.c 2011-07-04 11:13:26 +0000 -@@ -0,0 +1,60 @@ -+/* { dg-do run } */ -+/* { dg-options "-O2 -fmodulo-sched -fno-auto-inc-dec -O2 -fmodulo-sched-allow-regmoves" } */ -+ -+#include <stdlib.h> -+#include <stdarg.h> -+ -+struct df_ref_info -+{ -+ unsigned int *begin; -+ unsigned int *count; -+}; -+ -+extern void *memset (void *s, int c, __SIZE_TYPE__ n); -+ -+ -+__attribute__ ((noinline)) -+ int -+ df_reorganize_refs_by_reg_by_insn (struct df_ref_info *ref_info, -+ int num, unsigned int start) -+{ -+ unsigned int m = num; -+ unsigned int offset = 77; -+ unsigned int r; -+ -+ for (r = start; r < m; r++) -+ { -+ ref_info->begin[r] = offset; -+ offset += ref_info->count[r]; -+ ref_info->count[r] = 0; -+ } -+ -+ return offset; -+} -+ -+int -+main () -+{ -+ struct df_ref_info temp; -+ int num = 100; -+ unsigned int start = 5; -+ int i, offset; -+ -+ temp.begin = malloc (100 * sizeof (unsigned int)); -+ temp.count = malloc (100 * sizeof (unsigned int)); -+ -+ memset (temp.begin, 0, sizeof (unsigned int) * num); -+ memset (temp.count, 0, sizeof (unsigned int) * num); -+ -+ for (i = 0; i < num; i++) -+ temp.count[i] = i + 1; -+ -+ offset = df_reorganize_refs_by_reg_by_insn (&temp, num, start); -+ -+ if (offset != 5112) -+ abort (); -+ -+ free (temp.begin); -+ free (temp.count); -+ return 0; -+} - |