From 3629b6d931fbce2c51ef84d4580115e6a509616e Mon Sep 17 00:00:00 2001 From: "Yann E. MORIN\"" Date: Fri, 23 Mar 2012 01:36:42 -0700 Subject: cc/gcc: add gcc-4.7.0 Add the new release gcc-4.7.0. Signed-off-by: Bryan Hundven [yann.morin.1998@free.fr: add 4.7.0 patch] Signed-off-by: "Yann E. MORIN" diff --git a/config/cc/gcc.in b/config/cc/gcc.in index f64e299..bbfef59 100644 --- a/config/cc/gcc.in +++ b/config/cc/gcc.in @@ -36,6 +36,12 @@ choice # Don't remove next line # CT_INSERT_VERSION_BELOW +config CC_V_4_7_0 + bool + prompt "4.7.0 (EXPERIMENTAL)" + depends on EXPERIMENTAL + select CC_GCC_4_7 + config CC_V_linaro_4_6_2012_04 bool prompt "linaro-4.6-2012.04 (EXPERIMENTAL)" @@ -269,6 +275,20 @@ config CC_GCC_4_6_or_later bool select CC_GCC_4_5_or_later +config CC_GCC_4_7 + bool + select CC_GCC_4_7_or_later + select CC_GCC_USE_GMP_MPFR + select CC_GCC_USE_MPC + select CC_GCC_HAS_GRAPHITE + select CC_GCC_HAS_LTO + select CC_GCC_HAS_PKGVERSION_BUGURL + select CC_GCC_HAS_BUILD_ID + +config CC_GCC_4_7_or_later + bool + select CC_GCC_4_6_or_later + config CC_GCC_HAS_GRAPHITE bool @@ -331,6 +351,7 @@ config CC_VERSION string # Don't remove next line # CT_INSERT_VERSION_STRING_BELOW + default "4.7.0" if CC_V_4_7_0 default "linaro-4.6-2012.04" if CC_V_linaro_4_6_2012_04 default "4.6.3" if CC_V_4_6_3 default "4.6.2" if CC_V_4_6_2 diff --git a/patches/gcc/4.7.0/100-PR52734-tree-ssa-tail-merge.patch b/patches/gcc/4.7.0/100-PR52734-tree-ssa-tail-merge.patch new file mode 100644 index 0000000..5df5431 --- /dev/null +++ b/patches/gcc/4.7.0/100-PR52734-tree-ssa-tail-merge.patch @@ -0,0 +1,91 @@ +------------------------------------------------------------------------ +r186424 | vries | 2012-04-13 18:44:18 +0200 (Fri, 13 Apr 2012) | 12 lines + +2012-04-13 Tom de Vries + + Backport from mainline r186418. + + 2012-04-13 Tom de Vries + + * tree-ssa-tail-merge.c (gsi_advance_bw_nondebug_nonlocal): Add + parameters vuse and vuse_escaped. + (find_duplicate): Init vuse1, vuse2 and vuse_escaped. Pass to + gsi_advance_bw_nondebug_nonlocal. Return if vuse_escaped and + vuse1 != vuse2. + +------------------------------------------------------------------------ +Index: gcc/tree-ssa-tail-merge.c +=================================================================== +--- gcc-4.7.0/gcc/tree-ssa-tail-merge.c (revision 186423) ++++ gcc-4.7.0/gcc/tree-ssa-tail-merge.c (revision 186424) +@@ -1123,18 +1123,31 @@ + } + } + +-/* Let GSI skip backwards over local defs. */ ++/* Let GSI skip backwards over local defs. Return the earliest vuse in VUSE. ++ Return true in VUSE_ESCAPED if the vuse influenced a SSA_OP_DEF of one of the ++ processed statements. */ + + static void +-gsi_advance_bw_nondebug_nonlocal (gimple_stmt_iterator *gsi) ++gsi_advance_bw_nondebug_nonlocal (gimple_stmt_iterator *gsi, tree *vuse, ++ bool *vuse_escaped) + { + gimple stmt; ++ tree lvuse; + + while (true) + { + if (gsi_end_p (*gsi)) + return; + stmt = gsi_stmt (*gsi); ++ ++ lvuse = gimple_vuse (stmt); ++ if (lvuse != NULL_TREE) ++ { ++ *vuse = lvuse; ++ if (!ZERO_SSA_OPERANDS (stmt, SSA_OP_DEF)) ++ *vuse_escaped = true; ++ } ++ + if (!(is_gimple_assign (stmt) && local_def (gimple_get_lhs (stmt)) + && !gimple_has_side_effects (stmt))) + return; +@@ -1150,9 +1163,11 @@ + { + gimple_stmt_iterator gsi1 = gsi_last_nondebug_bb (bb1); + gimple_stmt_iterator gsi2 = gsi_last_nondebug_bb (bb2); ++ tree vuse1 = NULL_TREE, vuse2 = NULL_TREE; ++ bool vuse_escaped = false; + +- gsi_advance_bw_nondebug_nonlocal (&gsi1); +- gsi_advance_bw_nondebug_nonlocal (&gsi2); ++ gsi_advance_bw_nondebug_nonlocal (&gsi1, &vuse1, &vuse_escaped); ++ gsi_advance_bw_nondebug_nonlocal (&gsi2, &vuse2, &vuse_escaped); + + while (!gsi_end_p (gsi1) && !gsi_end_p (gsi2)) + { +@@ -1161,13 +1176,20 @@ + + gsi_prev_nondebug (&gsi1); + gsi_prev_nondebug (&gsi2); +- gsi_advance_bw_nondebug_nonlocal (&gsi1); +- gsi_advance_bw_nondebug_nonlocal (&gsi2); ++ gsi_advance_bw_nondebug_nonlocal (&gsi1, &vuse1, &vuse_escaped); ++ gsi_advance_bw_nondebug_nonlocal (&gsi2, &vuse2, &vuse_escaped); + } + + if (!(gsi_end_p (gsi1) && gsi_end_p (gsi2))) + return; + ++ /* If the incoming vuses are not the same, and the vuse escaped into an ++ SSA_OP_DEF, then merging the 2 blocks will change the value of the def, ++ which potentially means the semantics of one of the blocks will be changed. ++ TODO: make this check more precise. */ ++ if (vuse_escaped && vuse1 != vuse2) ++ return; ++ + if (dump_file) + fprintf (dump_file, "find_duplicates: duplicate of \n", + bb1->index, bb2->index); -- cgit v0.10.2-6-g49f6