Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/netbsd-6]: src/external/gpl3/gcc/dist/gcc Pull up revisions:
details: https://anonhg.NetBSD.org/src/rev/f458fe928c05
branches: netbsd-6
changeset: 774249:f458fe928c05
user: jdc <jdc%NetBSD.org@localhost>
date: Sun Jun 24 16:41:22 2012 +0000
description:
Pull up revisions:
src/external/gpl3/gcc/dist/gcc/ChangeLog revision 1.3
src/external/gpl3/gcc/dist/gcc/reload.c revision 1.2
src/external/gpl3/gcc/dist/gcc/reload1.c revision 1.2
(requested by martin in ticket #352).
Apply upstream revision 175141: setjmp vs. unchanged register values;
should fix PR toolchain/45837.
diffstat:
external/gpl3/gcc/dist/gcc/ChangeLog | 11 +++++++++++
external/gpl3/gcc/dist/gcc/reload.c | 9 +++++++++
external/gpl3/gcc/dist/gcc/reload1.c | 7 +++++++
3 files changed, 27 insertions(+), 0 deletions(-)
diffs (57 lines):
diff -r a44de082a896 -r f458fe928c05 external/gpl3/gcc/dist/gcc/ChangeLog
--- a/external/gpl3/gcc/dist/gcc/ChangeLog Sun Jun 24 16:35:30 2012 +0000
+++ b/external/gpl3/gcc/dist/gcc/ChangeLog Sun Jun 24 16:41:22 2012 +0000
@@ -5,6 +5,17 @@
* config/pa/pa.h (LEGITIMATE_CONSTANT_P): Return false for
TLS_MODEL_GLOBAL_DYNAMIC and TLS_MODEL_LOCAL_DYNAMIC symbol references.
+2011-06-17 Hans-Peter Nilsson <hp%axis.com@localhost>
+
+ Backport from mainline
+ 2011-06-17 Hans-Peter Nilsson <hp%axis.com@localhost>
+
+ PR rtl-optimization/48542
+ * reload.c (find_equiv_reg): Stop looking when finding a
+ setjmp-type call.
+ * reload1.c (reload_as_needed): Invalidate all reload
+ registers when crossing a setjmp-type call.
+
2011-04-28 Release Manager
* GCC 4.5.3 released.
diff -r a44de082a896 -r f458fe928c05 external/gpl3/gcc/dist/gcc/reload.c
--- a/external/gpl3/gcc/dist/gcc/reload.c Sun Jun 24 16:35:30 2012 +0000
+++ b/external/gpl3/gcc/dist/gcc/reload.c Sun Jun 24 16:41:22 2012 +0000
@@ -6795,6 +6795,15 @@
|| num > PARAM_VALUE (PARAM_MAX_RELOAD_SEARCH_INSNS))
return 0;
+ /* Don't reuse register contents from before a setjmp-type
+ function call; on the second return (from the longjmp) it
+ might have been clobbered by a later reuse. It doesn't
+ seem worthwhile to actually go and see if it is actually
+ reused even if that information would be readily available;
+ just don't reuse it across the setjmp call. */
+ if (CALL_P (p) && find_reg_note (p, REG_SETJMP, NULL_RTX))
+ return 0;
+
if (NONJUMP_INSN_P (p)
/* If we don't want spill regs ... */
&& (! (reload_reg_p != 0
diff -r a44de082a896 -r f458fe928c05 external/gpl3/gcc/dist/gcc/reload1.c
--- a/external/gpl3/gcc/dist/gcc/reload1.c Sun Jun 24 16:35:30 2012 +0000
+++ b/external/gpl3/gcc/dist/gcc/reload1.c Sun Jun 24 16:41:22 2012 +0000
@@ -4487,6 +4487,13 @@
{
AND_COMPL_HARD_REG_SET (reg_reloaded_valid, call_used_reg_set);
AND_COMPL_HARD_REG_SET (reg_reloaded_valid, reg_reloaded_call_part_clobbered);
+
+ /* If this is a call to a setjmp-type function, we must not
+ reuse any reload reg contents across the call; that will
+ just be clobbered by other uses of the register in later
+ code, before the longjmp. */
+ if (find_reg_note (insn, REG_SETJMP, NULL_RTX))
+ CLEAR_HARD_REG_SET (reg_reloaded_valid);
}
}
Home |
Main Index |
Thread Index |
Old Index