This commit is contained in:
Jakub Jelinek 2014-11-01 09:17:01 +01:00
parent 3438bcad98
commit f5f8bc6087
5 changed files with 155 additions and 8 deletions

1
.gitignore vendored
View File

@ -26,3 +26,4 @@
/gcc-4.9.1-20140930.tar.bz2
/gcc-4.9.1-20141017.tar.bz2
/gcc-4.9.1-20141024.tar.bz2
/gcc-4.9.2-20141101.tar.bz2

View File

@ -1,9 +1,9 @@
%global DATE 20141024
%global SVNREV 216625
%global gcc_version 4.9.1
%global DATE 20141101
%global SVNREV 216995
%global gcc_version 4.9.2
# 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 13
%global gcc_release 1
%global _unpackaged_files_terminate_build 0
%global _performance_build 1
%global multilib_64_archs sparc64 ppc64 ppc64p7 s390x x86_64
@ -200,6 +200,7 @@ Patch15: gcc49-color-auto.patch
Patch16: gcc49-libgo-p224.patch
Patch17: gcc49-aarch64-async-unw-tables.patch
Patch18: gcc49-aarch64-unwind-opt.patch
Patch19: gcc49-pr63659.patch
Patch1100: cloog-%{cloog_version}-ppc64le-config.patch
@ -728,6 +729,7 @@ package or when debugging this package.
rm -f libgo/go/crypto/elliptic/p224{,_test}.go
%patch17 -p0 -b .aarch64-async-unw-tables~
%patch18 -p0 -b .aarch64-unwind-opt~
%patch19 -p0 -b .pr63659~
%if 0%{?_enable_debug_packages}
cat > split-debuginfo.sh <<\EOF
@ -778,7 +780,7 @@ chmod 755 split-debuginfo.sh
%patch1100 -p0 -b .cloog-ppc64le-config~
sed -i -e 's/4\.9\.2/4.9.1/' gcc/BASE-VER
sed -i -e 's/4\.9\.3/4.9.2/' gcc/BASE-VER
echo 'Red Hat %{version}-%{gcc_release}' > gcc/DEV-PHASE
%if 0%{?fedora} >= 16 || 0%{?rhel} >= 7
@ -2052,6 +2054,9 @@ fi
%if %{build_libcilkrts}
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/cilk
%endif
%if %{build_libasan}
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/sanitizer
%endif
%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/collect2
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/crt*.o
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcc.a
@ -2800,6 +2805,13 @@ fi
%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/plugin
%changelog
* Sat Nov 1 2014 Jakub Jelinek <jakub@redhat.com> 4.9.2-1
- update from the 4.9 branch
- GCC 4.9.2 release
- PRs sanitizer/63638, sanitizer/63697, tree-optimization/63530
- handle REG_EQ* notes in REE (PR rtl-optimization/63659)
- include asan/lsan sanitizer/ includes
* Fri Oct 24 2014 Jakub Jelinek <jakub@redhat.com> 4.9.1-13
- update from the 4.9 branch
- PRs bootstrap/63632, libfortran/63589, libstdc++/63500,

View File

@ -4,7 +4,7 @@
<a class="link" href="http://www.fsf.org/" target="_top">FSF
</a>
</p><p>
+ Release 4.9.1
+ Release 4.9.2
+ </p><p>
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation
@ -18,7 +18,7 @@
- The API documentation, rendered into HTML, can be viewed online:
+ The API documentation, rendered into HTML, can be viewed here:
</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <a class="link" href="api/index.html" target="_top">for the 4.9.1 release, local
+ <a class="link" href="api/index.html" target="_top">for the 4.9.2 release, local
+ </a>
+ </p></li><li class="listitem"><p>
<a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-3.4/index.html" target="_top">for the 3.4 release

134
gcc49-pr63659.patch Normal file
View File

@ -0,0 +1,134 @@
2014-10-31 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/63659
* ree.c (update_reg_equal_equiv_notes): New function.
(combine_set_extension, transform_ifelse): Use it.
* gcc.c-torture/execute/pr63659.c: New test.
--- gcc/ree.c.jj 2014-10-22 15:52:18.000000000 +0200
+++ gcc/ree.c 2014-10-27 19:18:37.287412478 +0100
@@ -266,6 +266,50 @@ typedef struct ext_cand
static int max_insn_uid;
+/* Update or remove REG_EQUAL or REG_EQUIV notes for INSN. */
+
+static bool
+update_reg_equal_equiv_notes (rtx_insn *insn, enum machine_mode new_mode,
+ enum machine_mode old_mode, enum rtx_code code)
+{
+ rtx *loc = &REG_NOTES (insn);
+ while (*loc)
+ {
+ enum reg_note kind = REG_NOTE_KIND (*loc);
+ if (kind == REG_EQUAL || kind == REG_EQUIV)
+ {
+ rtx orig_src = XEXP (*loc, 0);
+ /* Update equivalency constants. Recall that RTL constants are
+ sign-extended. */
+ if (GET_CODE (orig_src) == CONST_INT
+ && HOST_BITS_PER_WIDE_INT >= GET_MODE_BITSIZE (new_mode))
+ {
+ if (INTVAL (orig_src) >= 0 || code == SIGN_EXTEND)
+ /* Nothing needed. */;
+ else
+ {
+ /* Zero-extend the negative constant by masking out the
+ bits outside the source mode. */
+ rtx new_const_int
+ = gen_int_mode (INTVAL (orig_src)
+ & GET_MODE_MASK (old_mode),
+ new_mode);
+ if (!validate_change (insn, &XEXP (*loc, 0),
+ new_const_int, true))
+ return false;
+ }
+ loc = &XEXP (*loc, 1);
+ }
+ /* Drop all other notes, they assume a wrong mode. */
+ else if (!validate_change (insn, loc, XEXP (*loc, 1), true))
+ return false;
+ }
+ else
+ loc = &XEXP (*loc, 1);
+ }
+ return true;
+}
+
/* Given a insn (CURR_INSN), an extension candidate for removal (CAND)
and a pointer to the SET rtx (ORIG_SET) that needs to be modified,
this code modifies the SET rtx to a new SET rtx that extends the
@@ -287,6 +331,7 @@ static bool
combine_set_extension (ext_cand *cand, rtx_insn *curr_insn, rtx *orig_set)
{
rtx orig_src = SET_SRC (*orig_set);
+ enum machine_mode orig_mode = GET_MODE (SET_DEST (*orig_set));
rtx new_set;
rtx cand_pat = PATTERN (cand->insn);
@@ -323,9 +368,8 @@ combine_set_extension (ext_cand *cand, r
{
/* Zero-extend the negative constant by masking out the bits outside
the source mode. */
- enum machine_mode src_mode = GET_MODE (SET_DEST (*orig_set));
rtx new_const_int
- = gen_int_mode (INTVAL (orig_src) & GET_MODE_MASK (src_mode),
+ = gen_int_mode (INTVAL (orig_src) & GET_MODE_MASK (orig_mode),
GET_MODE (new_reg));
new_set = gen_rtx_SET (VOIDmode, new_reg, new_const_int);
}
@@ -364,7 +408,9 @@ combine_set_extension (ext_cand *cand, r
/* This change is a part of a group of changes. Hence,
validate_change will not try to commit the change. */
- if (validate_change (curr_insn, orig_set, new_set, true))
+ if (validate_change (curr_insn, orig_set, new_set, true)
+ && update_reg_equal_equiv_notes (curr_insn, cand->mode, orig_mode,
+ cand->code))
{
if (dump_file)
{
@@ -414,7 +460,9 @@ transform_ifelse (ext_cand *cand, rtx_in
ifexpr = gen_rtx_IF_THEN_ELSE (cand->mode, cond, map_srcreg, map_srcreg2);
new_set = gen_rtx_SET (VOIDmode, map_dstreg, ifexpr);
- if (validate_change (def_insn, &PATTERN (def_insn), new_set, true))
+ if (validate_change (def_insn, &PATTERN (def_insn), new_set, true)
+ && update_reg_equal_equiv_notes (def_insn, cand->mode, GET_MODE (dstreg),
+ cand->code))
{
if (dump_file)
{
--- gcc/testsuite/gcc.c-torture/execute/pr63659.c.jj 2014-10-27 19:26:57.720902738 +0100
+++ gcc/testsuite/gcc.c-torture/execute/pr63659.c 2014-10-27 19:26:36.000000000 +0100
@@ -0,0 +1,29 @@
+/* PR rtl-optimization/63659 */
+
+int a, b, c, *d = &b, g, h, i;
+unsigned char e;
+char f;
+
+int
+main ()
+{
+ while (a)
+ {
+ for (a = 0; a; a++)
+ for (; c; c++)
+ ;
+ if (i)
+ break;
+ }
+
+ char j = c, k = -1, l;
+ l = g = j >> h;
+ f = l == 0 ? k : k % l;
+ e = 0 ? 0 : f;
+ *d = e;
+
+ if (b != 255)
+ __builtin_abort ();
+
+ return 0;
+}

View File

@ -1,3 +1,3 @@
e34fca0540d840e5d0f6427e98c92252 cloog-0.18.1.tar.gz
715eda9680ef1144dec3b44b913f3b16 gcc-4.9.1-20141024.tar.bz2
3b5578a7f9e33fb0b6321ab5283c4cbf gcc-4.9.2-20141101.tar.bz2
e039bfcfb6c2ab039b8ee69bf883e824 isl-0.12.2.tar.bz2