This commit is contained in:
Jakub Jelinek 2014-09-12 11:08:32 +02:00
parent 2bdb06cea2
commit 9834bb7938
4 changed files with 68 additions and 4 deletions

1
.gitignore vendored
View File

@ -21,3 +21,4 @@
/gcc-4.9.1-20140807.tar.bz2
/gcc-4.9.1-20140813.tar.bz2
/gcc-4.9.1-20140815.tar.bz2
/gcc-4.9.1-20140912.tar.bz2

View File

@ -1,9 +1,9 @@
%global DATE 20140815
%global SVNREV 214009
%global DATE 20140912
%global SVNREV 215204
%global gcc_version 4.9.1
# 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 8
%global gcc_release 9
%global _unpackaged_files_terminate_build 0
%global _performance_build 1
%global multilib_64_archs sparc64 ppc64 ppc64p7 s390x x86_64
@ -203,6 +203,7 @@ Patch18: gcc49-aarch64-unwind-opt.patch
Patch19: gcc49-pr62098.patch
Patch20: gcc49-pr62025.patch
Patch21: gcc49-pr62131.patch
Patch22: gcc49-pr62662.patch
Patch1100: cloog-%{cloog_version}-ppc64le-config.patch
@ -734,6 +735,7 @@ rm -f libgo/go/crypto/elliptic/p224{,_test}.go
%patch19 -p0 -b .pr62098~
%patch20 -p0 -b .pr62025~
%patch21 -p0 -b .pr62131~
%patch22 -p0 -b .pr62662~
%if 0%{?_enable_debug_packages}
cat > split-debuginfo.sh <<\EOF
@ -2806,6 +2808,23 @@ fi
%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/plugin
%changelog
* Fri Sep 12 2014 Jakub Jelinek <jakub@redhat.com> 4.9.1-9
- update from the 4.9 branch
- PRs c++/58624, c++/61214, c++/61659, c++/62129, c++/62224, c++/62659,
c++/63139, c/61271, c/62294, fortran/62106, fortran/62142,
fortran/62214, fortran/62215, fortran/62270, ipa/60449, ipa/61986,
ipa/62015, libgfortran/62188, libstdc++/62264, libstdc++/63219,
middle-end/61776, other/62008, other/62248, rtl-optimization/61672,
rtl-optimization/62004, rtl-optimization/62030,
rtl-optimization/62079, rtl-optimization/62146, target/61641,
target/61996, target/62011, target/62038, target/62040, target/62111,
target/62195, target/62261, target/62262, target/62312, target/63209,
target/63223, target/63228, testsuite/56194, tree-optimization/60196,
tree-optimization/62075, tree-optimization/62091,
tree-optimization/62175, tree-optimization/63189
- fix s390{,x} return address handling in epilogues (#1131899,
PR target/62662)
* Fri Aug 15 2014 Jakub Jelinek <jakub@redhat.com> 4.9.1-8
- update from the 4.9 branch
- PRs fortran/62076, fortran/62107, lto/62032, middle-end/62092,

44
gcc49-pr62662.patch Normal file
View File

@ -0,0 +1,44 @@
2014-09-10 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
PR target/62662
* config/s390/s390.c (s390_emit_epilogue): When doing the return
address load optimization force s390_optimize_prologue to leave it
that way. Only do the optimization if we already decided to push
r14 into a stack slot.
--- gcc/config/s390/s390.c
+++ gcc/config/s390/s390.c
@@ -9082,11 +9082,14 @@ s390_emit_epilogue (bool sibcall)
if (! sibcall)
{
/* Fetch return address from stack before load multiple,
- this will do good for scheduling. */
-
- if (cfun_frame_layout.save_return_addr_p
- || (cfun_frame_layout.first_restore_gpr < BASE_REGNUM
- && cfun_frame_layout.last_restore_gpr > RETURN_REGNUM))
+ this will do good for scheduling.
+
+ Only do this if we already decided that r14 needs to be
+ saved to a stack slot. (And not just because r14 happens to
+ be in between two GPRs which need saving.) Otherwise it
+ would be difficult to take that decision back in
+ s390_optimize_prologue. */
+ if (cfun_gpr_save_slot (RETURN_REGNUM) == -1)
{
int return_regnum = find_unused_clobbered_reg();
if (!return_regnum)
@@ -9101,6 +9104,13 @@ s390_emit_epilogue (bool sibcall)
addr = gen_rtx_MEM (Pmode, addr);
set_mem_alias_set (addr, get_frame_alias_set ());
emit_move_insn (return_reg, addr);
+
+ /* Once we did that optimization we have to make sure
+ s390_optimize_prologue does not try to remove the
+ store of r14 since we will not be able to find the
+ load issued here. */
+ cfun_frame_layout.save_return_addr_p = true;
+ cfun_gpr_save_slot (RETURN_REGNUM) = -1;
}
}

View File

@ -1,3 +1,3 @@
e34fca0540d840e5d0f6427e98c92252 cloog-0.18.1.tar.gz
dff0aab44d2b28c124b53322678be13b gcc-4.9.1-20140815.tar.bz2
c7ea3e348924af6932bc3cfb32e2ea54 gcc-4.9.1-20140912.tar.bz2
e039bfcfb6c2ab039b8ee69bf883e824 isl-0.12.2.tar.bz2