5.0.0-0.6
This commit is contained in:
parent
7f99993652
commit
b8d50582fb
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
||||
/gcc-5.0.0-20150123.tar.bz2
|
||||
/gcc-5.0.0-20150130.tar.bz2
|
||||
|
36
gcc.spec
36
gcc.spec
@ -1,9 +1,9 @@
|
||||
%global DATE 20150123
|
||||
%global SVNREV 220063
|
||||
%global DATE 20150130
|
||||
%global SVNREV 220295
|
||||
%global gcc_version 5.0.0
|
||||
# Note, gcc_release must be integer, if you want to add suffixes to
|
||||
# %{release}, append them after %{gcc_release} on Release: line.
|
||||
%global gcc_release 0.5
|
||||
%global gcc_release 0.6
|
||||
%global _unpackaged_files_terminate_build 0
|
||||
%global _performance_build 1
|
||||
%global multilib_64_archs sparc64 ppc64 ppc64p7 s390x x86_64
|
||||
@ -198,8 +198,8 @@ Patch11: gcc5-no-add-needed.patch
|
||||
Patch12: gcc5-libgo-p224.patch
|
||||
Patch13: gcc5-aarch64-async-unw-tables.patch
|
||||
Patch14: gcc5-libsanitize-aarch64-va42.patch
|
||||
Patch15: gcc5-ppc-jit.patch
|
||||
Patch16: gcc5-pr64738.patch
|
||||
Patch15: gcc5-pr61925.patch
|
||||
Patch16: gcc5-pr64817.patch
|
||||
|
||||
# On ARM EABI systems, we do want -gnueabi to be part of the
|
||||
# target triple.
|
||||
@ -749,8 +749,8 @@ package or when debugging this package.
|
||||
rm -f libgo/go/crypto/elliptic/p224{,_test}.go
|
||||
%patch13 -p0 -b .aarch64-async-unw-tables~
|
||||
%patch14 -p0 -b .libsanitize-aarch64-va42~
|
||||
%patch15 -p0 -b .ppc-jit~
|
||||
%patch16 -p0 -b .pr64738~
|
||||
%patch15 -p0 -b .pr61925~
|
||||
%patch16 -p0 -b .pr64817~
|
||||
|
||||
%if 0%{?_enable_debug_packages}
|
||||
mkdir dwz-wrapper
|
||||
@ -2936,5 +2936,27 @@ fi
|
||||
%doc rpm.doc/changelogs/libcc1/ChangeLog*
|
||||
|
||||
%changelog
|
||||
* Fri Jan 30 2015 Jakub Jelinek <jakub@redhat.com> 5.0.0-0.6
|
||||
- update from the trunk
|
||||
- PRs ada/64349, bootstrap/64612, bootstrap/64754, c++/49508, c++/58597,
|
||||
c++/63889, c++/64521, c++/64717, c/64709, c/64766, c/64778,
|
||||
fortran/62044, fortran/63861, fortran/64230, fortran/64771, go/63565,
|
||||
go/64510, go/64595, go/64738, ipa/60871, ipa/64139, ipa/64282,
|
||||
ipa/64730, ipa/64776, ipa/64801, jit/64257, jit/64708, jit/64780,
|
||||
libffi/64779, libffi/64799, libffi/64855, libfortran/64770,
|
||||
libgomp/64635, libstdc++/64368, libstdc++/64798, libstdc++/64828,
|
||||
lto/64837, middle-end/64421, middle-end/64764, middle-end/64805,
|
||||
middle-end/64809, other/63504, rtl-optimization/61058, target/15184,
|
||||
target/29366, target/49263, target/51244, target/52933, target/53987,
|
||||
target/54236, target/59533, target/64345, target/64580, target/64617,
|
||||
target/64659, target/64761, target/64795, target/64806,
|
||||
testsuite/64712, tree-optimization/56273, tree-optimization/59124,
|
||||
tree-optimization/64277, tree-optimization/64718,
|
||||
tree-optimization/64746, tree-optimization/64807,
|
||||
tree-optimization/64829, tree-optimization/64844,
|
||||
tree-optimization/64853, ubsan/64741
|
||||
- fix up #pragma GCC target handling on x86 (PR target/61925)
|
||||
- fix up VTA compile time hog during expansion (PR debug/64817)
|
||||
|
||||
* Fri Jan 23 2015 Jakub Jelinek <jakub@redhat.com> 5.0.0-0.5
|
||||
- new package
|
||||
|
@ -1,22 +0,0 @@
|
||||
2015-01-19 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
* config/rs6000/rs6000.c (rs6000_output_function_epilogue):
|
||||
Support the JIT by using 0 as the language type.
|
||||
|
||||
--- gcc/config/rs6000/rs6000.c
|
||||
+++ gcc/config/rs6000/rs6000.c
|
||||
@@ -25491,11 +25491,12 @@ rs6000_output_function_epilogue (FILE *file,
|
||||
use language_string.
|
||||
C is 0. Fortran is 1. Pascal is 2. Ada is 3. C++ is 9.
|
||||
Java is 13. Objective-C is 14. Objective-C++ isn't assigned
|
||||
- a number, so for now use 9. LTO and Go aren't assigned numbers
|
||||
+ a number, so for now use 9. LTO, Go and JIT aren't assigned numbers
|
||||
either, so for now use 0. */
|
||||
if (lang_GNU_C ()
|
||||
|| ! strcmp (language_string, "GNU GIMPLE")
|
||||
- || ! strcmp (language_string, "GNU Go"))
|
||||
+ || ! strcmp (language_string, "GNU Go")
|
||||
+ || ! strcmp (language_string, "libgccjit"))
|
||||
i = 0;
|
||||
else if (! strcmp (language_string, "GNU F77")
|
||||
|| ! strcmp (language_string, "GNU Fortran"))
|
220
gcc5-pr61925.patch
Normal file
220
gcc5-pr61925.patch
Normal file
@ -0,0 +1,220 @@
|
||||
2015-01-28 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/61925
|
||||
* config/i386/i386.c (ix86_reset_to_default_globals): Removed.
|
||||
(ix86_reset_previous_fndecl): Restore it here, unconditionally.
|
||||
(ix86_set_current_function): Rewritten.
|
||||
(ix86_add_new_builtins): Temporarily clear current_target_pragma
|
||||
when creating builtin fndecls.
|
||||
|
||||
* gcc.target/i386/pr61925-1.c: New test.
|
||||
* gcc.target/i386/pr61925-2.c: New test.
|
||||
* gcc.target/i386/pr61925-3.c: New test.
|
||||
|
||||
--- gcc/config/i386/i386.c.jj 2015-01-26 22:27:20.000000000 +0100
|
||||
+++ gcc/config/i386/i386.c 2015-01-28 14:41:03.008727087 +0100
|
||||
@@ -5076,35 +5076,20 @@ ix86_can_inline_p (tree caller, tree cal
|
||||
/* Remember the last target of ix86_set_current_function. */
|
||||
static GTY(()) tree ix86_previous_fndecl;
|
||||
|
||||
-/* Set target globals to default. */
|
||||
+/* Set targets globals to the default (or current #pragma GCC target
|
||||
+ if active). Invalidate ix86_previous_fndecl cache. */
|
||||
|
||||
-static void
|
||||
-ix86_reset_to_default_globals (void)
|
||||
-{
|
||||
- tree old_tree = (ix86_previous_fndecl
|
||||
- ? DECL_FUNCTION_SPECIFIC_TARGET (ix86_previous_fndecl)
|
||||
- : NULL_TREE);
|
||||
-
|
||||
- if (old_tree)
|
||||
- {
|
||||
- tree new_tree = target_option_current_node;
|
||||
- cl_target_option_restore (&global_options,
|
||||
- TREE_TARGET_OPTION (new_tree));
|
||||
- if (TREE_TARGET_GLOBALS (new_tree))
|
||||
- restore_target_globals (TREE_TARGET_GLOBALS (new_tree));
|
||||
- else if (new_tree == target_option_default_node)
|
||||
- restore_target_globals (&default_target_globals);
|
||||
- else
|
||||
- TREE_TARGET_GLOBALS (new_tree)
|
||||
- = save_target_globals_default_opts ();
|
||||
- }
|
||||
-}
|
||||
-
|
||||
-/* Invalidate ix86_previous_fndecl cache. */
|
||||
void
|
||||
ix86_reset_previous_fndecl (void)
|
||||
{
|
||||
- ix86_reset_to_default_globals ();
|
||||
+ tree new_tree = target_option_current_node;
|
||||
+ cl_target_option_restore (&global_options, TREE_TARGET_OPTION (new_tree));
|
||||
+ if (TREE_TARGET_GLOBALS (new_tree))
|
||||
+ restore_target_globals (TREE_TARGET_GLOBALS (new_tree));
|
||||
+ else if (new_tree == target_option_default_node)
|
||||
+ restore_target_globals (&default_target_globals);
|
||||
+ else
|
||||
+ TREE_TARGET_GLOBALS (new_tree) = save_target_globals_default_opts ();
|
||||
ix86_previous_fndecl = NULL_TREE;
|
||||
}
|
||||
|
||||
@@ -5117,34 +5102,39 @@ ix86_set_current_function (tree fndecl)
|
||||
/* Only change the context if the function changes. This hook is called
|
||||
several times in the course of compiling a function, and we don't want to
|
||||
slow things down too much or call target_reinit when it isn't safe. */
|
||||
- if (fndecl && fndecl != ix86_previous_fndecl)
|
||||
- {
|
||||
- tree old_tree = (ix86_previous_fndecl
|
||||
- ? DECL_FUNCTION_SPECIFIC_TARGET (ix86_previous_fndecl)
|
||||
- : NULL_TREE);
|
||||
+ if (fndecl == ix86_previous_fndecl)
|
||||
+ return;
|
||||
|
||||
- tree new_tree = (fndecl
|
||||
- ? DECL_FUNCTION_SPECIFIC_TARGET (fndecl)
|
||||
- : NULL_TREE);
|
||||
+ tree old_tree;
|
||||
+ if (ix86_previous_fndecl == NULL_TREE)
|
||||
+ old_tree = target_option_current_node;
|
||||
+ else if (DECL_FUNCTION_SPECIFIC_TARGET (ix86_previous_fndecl))
|
||||
+ old_tree = DECL_FUNCTION_SPECIFIC_TARGET (ix86_previous_fndecl);
|
||||
+ else
|
||||
+ old_tree = target_option_default_node;
|
||||
|
||||
- if (old_tree == new_tree)
|
||||
- ;
|
||||
+ if (fndecl == NULL_TREE)
|
||||
+ {
|
||||
+ if (old_tree != target_option_current_node)
|
||||
+ ix86_reset_previous_fndecl ();
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
- else if (new_tree && new_tree != target_option_default_node)
|
||||
- {
|
||||
- cl_target_option_restore (&global_options,
|
||||
- TREE_TARGET_OPTION (new_tree));
|
||||
- if (TREE_TARGET_GLOBALS (new_tree))
|
||||
- restore_target_globals (TREE_TARGET_GLOBALS (new_tree));
|
||||
- else
|
||||
- TREE_TARGET_GLOBALS (new_tree)
|
||||
- = save_target_globals_default_opts ();
|
||||
- }
|
||||
+ tree new_tree = DECL_FUNCTION_SPECIFIC_TARGET (fndecl);
|
||||
+ if (new_tree == NULL_TREE)
|
||||
+ new_tree = target_option_default_node;
|
||||
|
||||
- else if (old_tree && old_tree != target_option_default_node)
|
||||
- ix86_reset_to_default_globals ();
|
||||
- ix86_previous_fndecl = fndecl;
|
||||
+ if (old_tree != new_tree)
|
||||
+ {
|
||||
+ cl_target_option_restore (&global_options, TREE_TARGET_OPTION (new_tree));
|
||||
+ if (TREE_TARGET_GLOBALS (new_tree))
|
||||
+ restore_target_globals (TREE_TARGET_GLOBALS (new_tree));
|
||||
+ else if (new_tree == target_option_default_node)
|
||||
+ restore_target_globals (&default_target_globals);
|
||||
+ else
|
||||
+ TREE_TARGET_GLOBALS (new_tree) = save_target_globals_default_opts ();
|
||||
}
|
||||
+ ix86_previous_fndecl = fndecl;
|
||||
}
|
||||
|
||||
|
||||
@@ -30580,6 +30570,8 @@ static void
|
||||
ix86_add_new_builtins (HOST_WIDE_INT isa)
|
||||
{
|
||||
int i;
|
||||
+ tree saved_current_target_pragma = current_target_pragma;
|
||||
+ current_target_pragma = NULL_TREE;
|
||||
|
||||
for (i = 0; i < (int)IX86_BUILTIN_MAX; i++)
|
||||
{
|
||||
@@ -30606,6 +30598,8 @@ ix86_add_new_builtins (HOST_WIDE_INT isa
|
||||
TREE_NOTHROW (decl) = 1;
|
||||
}
|
||||
}
|
||||
+
|
||||
+ current_target_pragma = saved_current_target_pragma;
|
||||
}
|
||||
|
||||
/* Bits for builtin_description.flag. */
|
||||
--- gcc/testsuite/gcc.target/i386/pr61925-1.c.jj 2015-01-28 15:10:45.756833647 +0100
|
||||
+++ gcc/testsuite/gcc.target/i386/pr61925-1.c 2015-01-28 15:11:49.911722473 +0100
|
||||
@@ -0,0 +1,21 @@
|
||||
+/* PR target/61925 */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O2 -w" } */
|
||||
+/* { dg-additional-options "-march=i386 -mno-sse" { target ia32 } } */
|
||||
+
|
||||
+#pragma GCC push_options
|
||||
+#pragma GCC target("sse")
|
||||
+typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
|
||||
+typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__));
|
||||
+__m128i
|
||||
+bar (__m128 __A)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+#pragma GCC pop_options
|
||||
+
|
||||
+__attribute__ ((vector_size (16))) int
|
||||
+foo (__attribute__ ((vector_size (16))) int a, __attribute__ ((vector_size (16))) int b)
|
||||
+{
|
||||
+ return a + b;
|
||||
+}
|
||||
--- gcc/testsuite/gcc.target/i386/pr61925-2.c.jj 2015-01-28 15:10:48.651783506 +0100
|
||||
+++ gcc/testsuite/gcc.target/i386/pr61925-2.c 2015-01-28 15:11:55.432626851 +0100
|
||||
@@ -0,0 +1,21 @@
|
||||
+/* PR target/61925 */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O2 -w" } */
|
||||
+/* { dg-additional-options "-march=i386 -mno-sse" { target ia32 } } */
|
||||
+
|
||||
+#pragma GCC push_options
|
||||
+#pragma GCC target("sse")
|
||||
+typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
|
||||
+extern __inline __m128 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||
+foo (void)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+#pragma GCC target("sse2")
|
||||
+#pragma GCC pop_options
|
||||
+
|
||||
+__attribute__ ((vector_size (16))) int
|
||||
+bar (__attribute__ ((vector_size (16))) int a, __attribute__ ((vector_size (16))) int b)
|
||||
+{
|
||||
+ return a + b;
|
||||
+}
|
||||
--- gcc/testsuite/gcc.target/i386/pr61925-3.c.jj 2015-01-28 15:10:51.538733503 +0100
|
||||
+++ gcc/testsuite/gcc.target/i386/pr61925-3.c 2015-01-28 15:12:01.316524940 +0100
|
||||
@@ -0,0 +1,27 @@
|
||||
+/* PR target/61925 */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O2 -w" } */
|
||||
+/* { dg-additional-options "-march=i386 -mno-sse" { target ia32 } } */
|
||||
+
|
||||
+#pragma GCC push_options
|
||||
+#pragma GCC target("sse")
|
||||
+typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
|
||||
+
|
||||
+void
|
||||
+foo (void)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+__attribute__((target ("avx"))) void
|
||||
+bar (void)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+#pragma GCC target("sse2")
|
||||
+#pragma GCC pop_options
|
||||
+
|
||||
+__attribute__ ((vector_size (16))) int
|
||||
+baz (__attribute__ ((vector_size (16))) int a, __attribute__ ((vector_size (16))) int b)
|
||||
+{
|
||||
+ return a + b;
|
||||
+}
|
@ -1,28 +0,0 @@
|
||||
2015-01-23 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR go/64738
|
||||
* Makefile.am (AM_LDFLAGS): Remove -static-libgo flag.
|
||||
* Makefile.in: Regenerated.
|
||||
|
||||
--- gotools/Makefile.am 2015-01-23 09:42:05.747471685 +0100
|
||||
+++ gotools/Makefile.am 2015-01-23 21:04:36.970202637 +0100
|
||||
@@ -38,7 +38,7 @@ endif
|
||||
GOCFLAGS = $(CFLAGS_FOR_TARGET)
|
||||
GOCOMPILE = $(GOCOMPILER) $(GOCFLAGS)
|
||||
|
||||
-AM_LDFLAGS = -L $(libgodir) -L $(libgodir)/.libs -static-libgo
|
||||
+AM_LDFLAGS = -L $(libgodir) -L $(libgodir)/.libs
|
||||
GOLINK = $(GOCOMPILER) $(AM_GOCFLAGS) $(LDFLAGS) $(AM_LDFLAGS) -o $@
|
||||
|
||||
cmdsrcdir = $(srcdir)/../libgo/go/cmd
|
||||
--- gotools/Makefile.in 2015-01-23 09:42:05.724472081 +0100
|
||||
+++ gotools/Makefile.in 2015-01-23 21:04:44.940065201 +0100
|
||||
@@ -230,7 +230,7 @@ LIBGODEP = $(libgodir)/libgo.la
|
||||
# Use the compiler we just built.
|
||||
@NATIVE_TRUE@GOCOMPILER = $(GOC_FOR_TARGET)
|
||||
GOCOMPILE = $(GOCOMPILER) $(GOCFLAGS)
|
||||
-AM_LDFLAGS = -L $(libgodir) -L $(libgodir)/.libs -static-libgo
|
||||
+AM_LDFLAGS = -L $(libgodir) -L $(libgodir)/.libs
|
||||
GOLINK = $(GOCOMPILER) $(AM_GOCFLAGS) $(LDFLAGS) $(AM_LDFLAGS) -o $@
|
||||
cmdsrcdir = $(srcdir)/../libgo/go/cmd
|
||||
go_cmd_go_files = \
|
182
gcc5-pr64817.patch
Normal file
182
gcc5-pr64817.patch
Normal file
@ -0,0 +1,182 @@
|
||||
2015-01-30 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/64817
|
||||
* cfgexpand.c (deep_ter_debug_map): New variable.
|
||||
(avoid_deep_ter_for_debug): New function.
|
||||
(expand_debug_expr): If TERed SSA_NAME is in
|
||||
deep_ter_debug_map, use the corresponding DEBUG_EXPR_DECL
|
||||
instead of trying to expand SSA_NAME's def stmt.
|
||||
(expand_debug_locations): When expanding debug bind
|
||||
of a DEBUG_EXPR_DECL to corresponding SSA_NAME,
|
||||
temporarily remove the DEBUG_EXPR_DECL from deep_ter_debug_map's
|
||||
value.
|
||||
(pass_expand::execute): Call avoid_deep_ter_for_debug on
|
||||
all debug bind stmts. Delete deep_ter_debug_map after
|
||||
expand_debug_location if non-NULL and clear it.
|
||||
|
||||
* gcc.dg/pr64817-1.c: New test.
|
||||
* gcc.dg/pr64817-2.c: New test.
|
||||
|
||||
--- gcc/cfgexpand.c.jj 2015-01-28 21:24:56.000000000 +0100
|
||||
+++ gcc/cfgexpand.c 2015-01-30 13:22:46.002579984 +0100
|
||||
@@ -3767,6 +3767,48 @@ convert_debug_memory_address (machine_mo
|
||||
return x;
|
||||
}
|
||||
|
||||
+/* Map from SSA_NAMEs to corresponding DEBUG_EXPR_DECLs created
|
||||
+ by avoid_deep_ter_for_debug. */
|
||||
+
|
||||
+hash_map<tree, tree> *deep_ter_debug_map;
|
||||
+
|
||||
+/* Split too deep TER chains for debug stmts using debug temporaries. */
|
||||
+
|
||||
+static void
|
||||
+avoid_deep_ter_for_debug (gimple stmt, int depth)
|
||||
+{
|
||||
+ use_operand_p use_p;
|
||||
+ ssa_op_iter iter;
|
||||
+ FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, SSA_OP_USE)
|
||||
+ {
|
||||
+ tree use = USE_FROM_PTR (use_p);
|
||||
+ if (TREE_CODE (use) != SSA_NAME || SSA_NAME_IS_DEFAULT_DEF (use))
|
||||
+ continue;
|
||||
+ gimple g = get_gimple_for_ssa_name (use);
|
||||
+ if (g == NULL)
|
||||
+ continue;
|
||||
+ if (depth > 6 && !stmt_ends_bb_p (g))
|
||||
+ {
|
||||
+ if (deep_ter_debug_map == NULL)
|
||||
+ deep_ter_debug_map = new hash_map<tree, tree>;
|
||||
+
|
||||
+ tree &vexpr = deep_ter_debug_map->get_or_insert (use);
|
||||
+ if (vexpr != NULL)
|
||||
+ continue;
|
||||
+ vexpr = make_node (DEBUG_EXPR_DECL);
|
||||
+ gimple def_temp = gimple_build_debug_bind (vexpr, use, g);
|
||||
+ DECL_ARTIFICIAL (vexpr) = 1;
|
||||
+ TREE_TYPE (vexpr) = TREE_TYPE (use);
|
||||
+ DECL_MODE (vexpr) = TYPE_MODE (TREE_TYPE (use));
|
||||
+ gimple_stmt_iterator gsi = gsi_for_stmt (g);
|
||||
+ gsi_insert_after (&gsi, def_temp, GSI_NEW_STMT);
|
||||
+ avoid_deep_ter_for_debug (def_temp, 0);
|
||||
+ }
|
||||
+ else
|
||||
+ avoid_deep_ter_for_debug (g, depth + 1);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
/* Return an RTX equivalent to the value of the parameter DECL. */
|
||||
|
||||
static rtx
|
||||
@@ -4654,7 +4696,16 @@ expand_debug_expr (tree exp)
|
||||
gimple g = get_gimple_for_ssa_name (exp);
|
||||
if (g)
|
||||
{
|
||||
- op0 = expand_debug_expr (gimple_assign_rhs_to_tree (g));
|
||||
+ tree t = NULL_TREE;
|
||||
+ if (deep_ter_debug_map)
|
||||
+ {
|
||||
+ tree *slot = deep_ter_debug_map->get (exp);
|
||||
+ if (slot)
|
||||
+ t = *slot;
|
||||
+ }
|
||||
+ if (t == NULL_TREE)
|
||||
+ t = gimple_assign_rhs_to_tree (g);
|
||||
+ op0 = expand_debug_expr (t);
|
||||
if (!op0)
|
||||
return NULL;
|
||||
}
|
||||
@@ -4961,6 +5012,25 @@ expand_debug_locations (void)
|
||||
if (INSN_VAR_LOCATION_STATUS (insn)
|
||||
== VAR_INIT_STATUS_UNINITIALIZED)
|
||||
val = expand_debug_source_expr (value);
|
||||
+ /* The avoid_deep_ter_for_debug function inserts
|
||||
+ debug bind stmts after SSA_NAME definition, with the
|
||||
+ SSA_NAME as the whole bind location. Disable temporarily
|
||||
+ expansion of that SSA_NAME into the DEBUG_EXPR_DECL
|
||||
+ being defined in this DEBUG_INSN. */
|
||||
+ else if (deep_ter_debug_map && TREE_CODE (value) == SSA_NAME)
|
||||
+ {
|
||||
+ tree *slot = deep_ter_debug_map->get (value);
|
||||
+ if (slot)
|
||||
+ {
|
||||
+ if (*slot == INSN_VAR_LOCATION_DECL (insn))
|
||||
+ *slot = NULL_TREE;
|
||||
+ else
|
||||
+ slot = NULL;
|
||||
+ }
|
||||
+ val = expand_debug_expr (value);
|
||||
+ if (slot)
|
||||
+ *slot = INSN_VAR_LOCATION_DECL (insn);
|
||||
+ }
|
||||
else
|
||||
val = expand_debug_expr (value);
|
||||
gcc_assert (last == get_last_insn ());
|
||||
@@ -5821,6 +5891,15 @@ pass_expand::execute (function *fun)
|
||||
timevar_pop (TV_OUT_OF_SSA);
|
||||
SA.partition_to_pseudo = XCNEWVEC (rtx, SA.map->num_partitions);
|
||||
|
||||
+ if (MAY_HAVE_DEBUG_STMTS && flag_tree_ter)
|
||||
+ {
|
||||
+ gimple_stmt_iterator gsi;
|
||||
+ FOR_EACH_BB_FN (bb, cfun)
|
||||
+ for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
|
||||
+ if (gimple_debug_bind_p (gsi_stmt (gsi)))
|
||||
+ avoid_deep_ter_for_debug (gsi_stmt (gsi), 0);
|
||||
+ }
|
||||
+
|
||||
/* Make sure all values used by the optimization passes have sane
|
||||
defaults. */
|
||||
reg_renumber = 0;
|
||||
@@ -6008,6 +6087,12 @@ pass_expand::execute (function *fun)
|
||||
if (MAY_HAVE_DEBUG_INSNS)
|
||||
expand_debug_locations ();
|
||||
|
||||
+ if (deep_ter_debug_map)
|
||||
+ {
|
||||
+ delete deep_ter_debug_map;
|
||||
+ deep_ter_debug_map = NULL;
|
||||
+ }
|
||||
+
|
||||
/* Free stuff we no longer need after GIMPLE optimizations. */
|
||||
free_dominance_info (CDI_DOMINATORS);
|
||||
free_dominance_info (CDI_POST_DOMINATORS);
|
||||
--- gcc/testsuite/gcc.dg/pr64817-1.c.jj 2015-01-30 13:33:05.061143850 +0100
|
||||
+++ gcc/testsuite/gcc.dg/pr64817-1.c 2015-01-30 13:32:33.000000000 +0100
|
||||
@@ -0,0 +1,20 @@
|
||||
+/* PR debug/64817 */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O3 -g" } */
|
||||
+
|
||||
+int a, b, d;
|
||||
+
|
||||
+void
|
||||
+foo (void)
|
||||
+{
|
||||
+ for (b = 0; b < 9; b++)
|
||||
+ {
|
||||
+ int e;
|
||||
+ for (d = 0; d < 5; d++)
|
||||
+ {
|
||||
+ a &= 231;
|
||||
+ a ^= 14;
|
||||
+ }
|
||||
+ e = (a ^= 1) < 0;
|
||||
+ }
|
||||
+}
|
||||
--- gcc/testsuite/gcc.dg/pr64817-2.c.jj 2015-01-20 10:01:16.345964420 +0100
|
||||
+++ gcc/testsuite/gcc.dg/pr64817-2.c 2015-01-30 18:37:49.055911292 +0100
|
||||
@@ -0,0 +1,13 @@
|
||||
+/* PR debug/64817 */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O3 -g" } */
|
||||
+
|
||||
+int a;
|
||||
+
|
||||
+void
|
||||
+foo (void)
|
||||
+{
|
||||
+ int e;
|
||||
+ a = ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((a & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) & 231) ^ 14) ^ 1;
|
||||
+ e = (a < 0);
|
||||
+}
|
Loading…
Reference in New Issue
Block a user