diff options
author | doko <doko@6ca36cf4-e1d1-0310-8c6f-e303bb2178ca> | 2014-06-07 00:34:03 +0000 |
---|---|---|
committer | doko <doko@6ca36cf4-e1d1-0310-8c6f-e303bb2178ca> | 2014-06-07 00:34:03 +0000 |
commit | c600c3ba96d6cd40d2eeff888123f22439990e80 (patch) | |
tree | b8a0513eec21f0aaba4312cad9007c81c2100cd7 | |
parent | 766be60b92430e6ed316569452b7910422a6c470 (diff) | |
download | gcc-48-c600c3ba96d6cd40d2eeff888123f22439990e80.tar.gz |
* Update to SVN 20140606 (r211339) from the gcc-4_8-branch.
git-svn-id: svn://svn.debian.org/svn/gcccvs/branches/sid/gcc-4.8@7436 6ca36cf4-e1d1-0310-8c6f-e303bb2178ca
-rw-r--r-- | debian/changelog | 3 | ||||
-rw-r--r-- | debian/patches/svn-updates.diff | 864 |
2 files changed, 860 insertions, 7 deletions
diff --git a/debian/changelog b/debian/changelog index 676b838..f7462e7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,12 +1,13 @@ gcc-4.8 (4.8.3-3) UNRELEASED; urgency=medium + * Update to SVN 20140606 (r211339) from the gcc-4_8-branch. * Don't install the libstdc++ pretty printer file into the debug directory, but into the gdb auto-load directory. * Fix the removal of the libstdc++6 package, removing byte-compiled pretty printer files and pycache directories. * Fix PR c++/61046, taken from the trunk. LP: #1313102. - -- Matthias Klose <doko@debian.org> Mon, 02 Jun 2014 18:20:23 +0200 + -- Matthias Klose <doko@debian.org> Sat, 07 Jun 2014 02:28:40 +0200 gcc-4.8 (4.8.3-2) unstable; urgency=medium diff --git a/debian/patches/svn-updates.diff b/debian/patches/svn-updates.diff index 11f552f..8ba748f 100644 --- a/debian/patches/svn-updates.diff +++ b/debian/patches/svn-updates.diff @@ -1,10 +1,10 @@ -# DP: updates from the 4.8 branch upto 20140527 (r210956). +# DP: updates from the 4.8 branch upto 20140606 (r211339). last_updated() { cat > ${dir}LAST_UPDATED <<EOF -Tue May 27 09:28:18 CEST 2014 -Tue May 27 07:28:18 UTC 2014 (revision 210956) +Sat Jun 7 02:24:56 CEST 2014 +Sat Jun 7 00:24:56 UTC 2014 (revision 211339) EOF } @@ -12,18 +12,374 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/tags/gcc_4_8_3_release svn://gcc.gnu.o | sed -r 's,^--- (\S+)\t(\S+)(.*)$,--- a/src/\1\t\2,;s,^\+\+\+ (\S+)\t(\S+)(.*)$,+++ b/src/\1\t\2,' \ | awk '/^Index:.*\.(class|texi)/ {skip=1; next} /^Index:/ { skip=0 } skip==0' +Index: libstdc++-v3/scripts/run_doxygen +=================================================================== +--- a/src/libstdc++-v3/scripts/run_doxygen (.../tags/gcc_4_8_3_release) ++++ b/src/libstdc++-v3/scripts/run_doxygen (.../branches/gcc-4_8-branch) +@@ -193,8 +193,15 @@ + if $do_latex; then + cd ${outdir}/${mode} + +- # Also drop in the header file and style sheet +- doxygen -w latex header.tex doxygen.sty ++ # Grrr, Doxygen 1.8.x changed the -w latex options. ++ need_footer=`doxygen -h | sed -n -e '/-w latex/s=.*footer.*=true=p'` ++ ++ # Also drop in the header file (maybe footer file) and style sheet ++ if $need_footer; then ++ doxygen -w latex header.tex footer.tex doxygen.sty ++ else ++ doxygen -w latex header.tex doxygen.sty ++ fi + + echo :: + echo :: LaTeX pages begin with +Index: libstdc++-v3/include/std/future +=================================================================== +--- a/src/libstdc++-v3/include/std/future (.../tags/gcc_4_8_3_release) ++++ b/src/libstdc++-v3/include/std/future (.../branches/gcc-4_8-branch) +@@ -351,12 +351,14 @@ + void + _M_set_result(function<_Ptr_type()> __res, bool __ignore_failure = false) + { +- bool __set = __ignore_failure; ++ bool __set = false; + // all calls to this function are serialized, + // side-effects of invoking __res only happen once + call_once(_M_once, &_State_base::_M_do_set, this, ref(__res), + ref(__set)); +- if (!__set) ++ if (__set) ++ _M_cond.notify_all(); ++ else if (!__ignore_failure) + __throw_future_error(int(future_errc::promise_already_satisfied)); + } + +@@ -471,7 +473,6 @@ + lock_guard<mutex> __lock(_M_mutex); + _M_result.swap(__res); + } +- _M_cond.notify_all(); + __set = true; + } + +@@ -983,22 +984,25 @@ + void + set_value(const _Res& __r) + { ++ auto __future = _M_future; + auto __setter = _State::__setter(this, __r); +- _M_future->_M_set_result(std::move(__setter)); ++ __future->_M_set_result(std::move(__setter)); + } + + void + set_value(_Res&& __r) + { ++ auto __future = _M_future; + auto __setter = _State::__setter(this, std::move(__r)); +- _M_future->_M_set_result(std::move(__setter)); ++ __future->_M_set_result(std::move(__setter)); + } + + void + set_exception(exception_ptr __p) + { ++ auto __future = _M_future; + auto __setter = _State::__setter(__p, this); +- _M_future->_M_set_result(std::move(__setter)); ++ __future->_M_set_result(std::move(__setter)); + } + }; + +@@ -1081,15 +1085,17 @@ + void + set_value(_Res& __r) + { ++ auto __future = _M_future; + auto __setter = _State::__setter(this, __r); +- _M_future->_M_set_result(std::move(__setter)); ++ __future->_M_set_result(std::move(__setter)); + } + + void + set_exception(exception_ptr __p) + { ++ auto __future = _M_future; + auto __setter = _State::__setter(__p, this); +- _M_future->_M_set_result(std::move(__setter)); ++ __future->_M_set_result(std::move(__setter)); + } + }; + +@@ -1166,8 +1172,9 @@ + void + set_exception(exception_ptr __p) + { ++ auto __future = _M_future; + auto __setter = _State::__setter(__p, this); +- _M_future->_M_set_result(std::move(__setter)); ++ __future->_M_set_result(std::move(__setter)); + } + }; + +@@ -1193,8 +1200,9 @@ + inline void + promise<void>::set_value() + { ++ auto __future = _M_future; + auto __setter = _State::__setter(this); +- _M_future->_M_set_result(std::move(__setter)); ++ __future->_M_set_result(std::move(__setter)); + } + + +Index: libstdc++-v3/include/bits/stl_tree.h +=================================================================== +--- a/src/libstdc++-v3/include/bits/stl_tree.h (.../tags/gcc_4_8_3_release) ++++ b/src/libstdc++-v3/include/bits/stl_tree.h (.../branches/gcc-4_8-branch) +@@ -510,11 +510,11 @@ + + _Link_type + _M_end() +- { return static_cast<_Link_type>(&this->_M_impl._M_header); } ++ { return reinterpret_cast<_Link_type>(&this->_M_impl._M_header); } + + _Const_Link_type + _M_end() const +- { return static_cast<_Const_Link_type>(&this->_M_impl._M_header); } ++ { return reinterpret_cast<_Const_Link_type>(&this->_M_impl._M_header); } + + static const_reference + _S_value(_Const_Link_type __x) +Index: libstdc++-v3/include/tr2/bool_set +=================================================================== +--- a/src/libstdc++-v3/include/tr2/bool_set (.../tags/gcc_4_8_3_release) ++++ b/src/libstdc++-v3/include/tr2/bool_set (.../branches/gcc-4_8-branch) +@@ -44,7 +44,7 @@ + * bool_set + * + * See N2136, Bool_set: multi-valued logic +- * by Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion. ++ * by HervĂ© Brönnimann, Guillaume Melquiond, Sylvain Pion. + * + * The implicit conversion to bool is slippery! I may use the new + * explicit conversion. This has been specialized in the language +Index: libstdc++-v3/ChangeLog +=================================================================== +--- a/src/libstdc++-v3/ChangeLog (.../tags/gcc_4_8_3_release) ++++ b/src/libstdc++-v3/ChangeLog (.../branches/gcc-4_8-branch) +@@ -1,3 +1,27 @@ ++2014-06-03 Jonathan Wakely <jwakely@redhat.com> ++ ++ Backport from mainline ++ 2014-04-15 Jonathan Wakely <jwakely@redhat.com> ++ ++ PR libstdc++/60734 ++ * include/bits/stl_tree.h (_Rb_tree::_M_end): Fix invalid cast. ++ ++ Backport from mainline ++ 2014-05-16 Jonathan Wakely <jwakely@redhat.com> ++ ++ PR libstdc++/60966 ++ * include/std/future (__future_base::_State_baseV2::_M_set_result): ++ Signal condition variable after call_once returns. ++ (__future_base::_State_baseV2::_M_do_set): Do not signal here. ++ (promise::set_value, promise::set_exception): Increment the reference ++ count on the shared state until the function returns. ++ * testsuite/30_threads/promise/60966.cc: New. ++ ++2014-05-29 Jonathan Wakely <jwakely@redhat.com> ++ ++ * include/tr2/bool_set: Use UTF-8 for accented characters. ++ * scripts/run_doxygen: Handle Doxygen 1.8.x change. ++ + 2014-05-22 Release Manager + + * GCC 4.8.3 released. +Index: libstdc++-v3/testsuite/30_threads/promise/60966.cc +=================================================================== +--- a/src/libstdc++-v3/testsuite/30_threads/promise/60966.cc (.../tags/gcc_4_8_3_release) ++++ b/src/libstdc++-v3/testsuite/30_threads/promise/60966.cc (.../branches/gcc-4_8-branch) +@@ -0,0 +1,67 @@ ++// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-gnu* *-*-solaris* *-*-cygwin *-*-darwin* powerpc-ibm-aix* } } ++// { dg-options " -std=gnu++11 -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-gnu* powerpc-ibm-aix* } } ++// { dg-options " -std=gnu++11 -pthreads" { target *-*-solaris* } } ++// { dg-options " -std=gnu++11 " { target *-*-cygwin *-*-darwin* } } ++// { dg-require-cstdint "" } ++// { dg-require-gthreads "" } ++// { dg-require-atomic-builtins "" } ++ ++// Copyright (C) 2014 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 3, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// You should have received a copy of the GNU General Public License along ++// with this library; see the file COPYING3. If not see ++// <http://www.gnu.org/licenses/>. ++ ++// libstdc++/60966 ++// This test hangs if std::promise::~promise() destroys the ++// shared state before std::promise::set_value() finishes using it. ++ ++#include <future> ++#include <thread> ++#include <vector> ++ ++const int THREADS = 10; ++ ++void run_task(std::promise<void>* pr) ++{ ++ std::this_thread::sleep_for(std::chrono::milliseconds(100)); ++ pr->set_value(); ++} ++ ++int main() ++{ ++ std::vector<std::promise<void>*> tasks(THREADS); ++ std::vector<std::thread> threads(THREADS); ++ std::vector<std::future<void>> futures(THREADS); ++ ++ for (int i = 0; i < THREADS; ++i) ++ { ++ std::promise<void>* task = new std::promise<void>; ++ tasks[i] = task; ++ futures[i] = task->get_future(); ++ threads[i] = std::thread(run_task, task); ++ } ++ ++ for (int i = 0; i < THREADS; ++i) ++ { ++ // the temporary future releases the state as soon as wait() returns ++ std::future<void>(std::move(futures[i])).wait(); ++ // state is ready, should now be safe to delete promise, so it ++ // releases the shared state too ++ delete tasks[i]; ++ } ++ ++ for (auto& t : threads) ++ t.join(); ++} Index: gcc/DATESTAMP =================================================================== --- a/src/gcc/DATESTAMP (.../tags/gcc_4_8_3_release) +++ b/src/gcc/DATESTAMP (.../branches/gcc-4_8-branch) @@ -1 +1 @@ -20140522 -+20140527 ++20140607 +Index: gcc/ipa-cp.c +=================================================================== +--- a/src/gcc/ipa-cp.c (.../tags/gcc_4_8_3_release) ++++ b/src/gcc/ipa-cp.c (.../branches/gcc-4_8-branch) +@@ -447,6 +447,8 @@ + else if (!opt_for_fn (node->symbol.decl, optimize) + || !opt_for_fn (node->symbol.decl, flag_ipa_cp)) + reason = "non-optimized function"; ++ else if (node->tm_clone) ++ reason = "transactional memory clone"; + + if (reason && dump_file && !node->alias && !node->thunk.thunk_p) + fprintf (dump_file, "Function %s/%i is not versionable, reason: %s.\n", Index: gcc/ChangeLog =================================================================== --- a/src/gcc/ChangeLog (.../tags/gcc_4_8_3_release) +++ b/src/gcc/ChangeLog (.../branches/gcc-4_8-branch) -@@ -1,3 +1,28 @@ +@@ -1,3 +1,114 @@ ++2014-06-06 Michael Meissner <meissner@linux.vnet.ibm.com> ++ ++ Back port from trunk ++ 2014-06-06 Michael Meissner <meissner@linux.vnet.ibm.com> ++ ++ PR target/61431 ++ * config/rs6000/vsx.md (VSX_LE): Split VSX_D into 2 separate ++ iterators, VSX_D that handles 64-bit types, and VSX_LE that ++ handles swapping the two 64-bit double words on little endian ++ systems. Include V1TImode and optionally TImode in VSX_LE so that ++ these types are properly swapped. Change all of the insns and ++ splits that do the 64-bit swaps to use VSX_LE. ++ (vsx_le_perm_load_<mode>): Likewise. ++ (vsx_le_perm_store_<mode>): Likewise. ++ (splitters for little endian memory operations): Likewise. ++ (vsx_xxpermdi2_le_<mode>): Likewise. ++ (vsx_lxvd2x2_le_<mode>): Likewise. ++ (vsx_stxvd2x2_le_<mode>): Likewise. ++ ++2014-06-05 Martin Jambor <mjambor@suse.cz> ++ ++ PR ipa/61393 ++ * ipa-cp.c (determine_versionability): Pretend that tm_clones are ++ not versionable. ++ ++2014-06-04 Richard Biener <rguenther@suse.de> ++ ++ PR tree-optimization/61383 ++ * tree-ssa-ifcombine.c (bb_no_side_effects_p): Make sure ++ stmts can't trap. ++ ++2014-06-03 Andrey Belevantsev <abel@ispras.ru> ++ ++ Backport from mainline ++ 2014-05-14 Andrey Belevantsev <abel@ispras.ru> ++ ++ PR rtl-optimization/60866 ++ * sel-sched-ir (sel_init_new_insn): New parameter old_seqno. ++ Default it to -1. Pass it down to init_simplejump_data. ++ (init_simplejump_data): New parameter old_seqno. Pass it down ++ to get_seqno_for_a_jump. ++ (get_seqno_for_a_jump): New parameter old_seqno. Use it for ++ initializing new jump seqno as a last resort. Add comment. ++ (sel_redirect_edge_and_branch): Save old seqno of the conditional ++ jump and pass it down to sel_init_new_insn. ++ (sel_redirect_edge_and_branch_force): Likewise. ++ ++2014-06-03 Andrey Belevantsev <abel@ispras.ru> ++ ++ Backport from mainline ++ 2014-05-14 Andrey Belevantsev <abel@ispras.ru> ++ ++ PR rtl-optimization/60901 ++ * config/i386/i386.c (ix86_dependencies_evaluation_hook): Check that ++ bb predecessor belongs to the same scheduling region. Adjust comment. ++ ++2014-06-03 Uros Bizjak <ubizjak@gmail.com> ++ ++ Backport from mainline ++ 2014-06-02 Uros Bizjak <ubizjak@gmail.com> ++ ++ PR target/61239 ++ * config/i386/i386.c (ix86_expand_vec_perm) [case V32QImode]: Use ++ GEN_INT (-128) instead of GEN_INT (128) to set MSB of QImode constant. ++ ++2014-05-28 Guozhi Wei <carrot@google.com> ++ ++ PR target/61202 ++ * config/aarch64/arm_neon.h (vqdmulh_n_s16): Change the last operand's ++ constraint. ++ (vqdmulhq_n_s16): Likewise. ++ ++2014-05-28 Eric Botcazou <ebotcazou@adacore.com> ++ ++ Backport from mainline ++ 2014-05-27 Eric Botcazou <ebotcazou@adacore.com> ++ ++ * double-int.c (div_and_round_double) <ROUND_DIV_EXPR>: Use the proper ++ predicate to detect a negative quotient. ++ ++2014-05-28 Georg-Johann Lay <avr@gjlay.de> ++ ++ PR target/61044 ++ * doc/extend.texi (Local Labels): Note that label differences are ++ not supported for AVR. ++ +2014-05-26 Michael Tautschnig <mt@debian.org> + + PR target/61249 @@ -71,11 +427,163 @@ Index: gcc/testsuite/gcc.target/powerpc/htm-ttest.c +{ + return _HTM_STATE(__builtin_ttest()); +} +Index: gcc/testsuite/gcc.target/i386/pr60901.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/pr60901.c (.../tags/gcc_4_8_3_release) ++++ b/src/gcc/testsuite/gcc.target/i386/pr60901.c (.../branches/gcc-4_8-branch) +@@ -0,0 +1,17 @@ ++/* { dg-options "-O -fselective-scheduling -fschedule-insns -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops -fno-tree-dominator-opts" } */ ++ ++extern int n; ++extern void bar (void); ++extern int baz (int); ++ ++void ++foo (void) ++{ ++ int i, j; ++ for (j = 0; j < n; j++) ++ { ++ for (i = 1; i < j; i++) ++ bar (); ++ baz (0); ++ } ++} +Index: gcc/testsuite/gnat.dg/overflow_fixed.adb +=================================================================== +--- a/src/gcc/testsuite/gnat.dg/overflow_fixed.adb (.../tags/gcc_4_8_3_release) ++++ b/src/gcc/testsuite/gnat.dg/overflow_fixed.adb (.../branches/gcc-4_8-branch) +@@ -0,0 +1,19 @@ ++-- { dg-do run } ++-- { dg-options "-gnato -O" } ++ ++procedure Overflow_Fixed is ++ ++ type Unsigned_8_Bit is mod 2**8; ++ ++ procedure Fixed_To_Eight (Value : Duration) is ++ Item : Unsigned_8_Bit; ++ begin ++ Item := Unsigned_8_Bit(Value); ++ raise Program_Error; ++ exception ++ when Constraint_Error => null; -- expected case ++ end; ++ ++begin ++ Fixed_To_Eight (-0.5); ++end; +Index: gcc/testsuite/gnat.dg/aliasing1.adb +=================================================================== +--- a/src/gcc/testsuite/gnat.dg/aliasing1.adb (.../tags/gcc_4_8_3_release) ++++ b/src/gcc/testsuite/gnat.dg/aliasing1.adb (.../branches/gcc-4_8-branch) +@@ -18,5 +18,5 @@ + + end Aliasing1; + +--- { dg-final { scan-tree-dump-not "__gnat_rcheck" "optimized" } } ++-- { dg-final { scan-tree-dump-not "gnat_rcheck" "optimized" } } + -- { dg-final { cleanup-tree-dump "optimized" } } +Index: gcc/testsuite/gcc.dg/pr60866.c +=================================================================== +--- a/src/gcc/testsuite/gcc.dg/pr60866.c (.../tags/gcc_4_8_3_release) ++++ b/src/gcc/testsuite/gcc.dg/pr60866.c (.../branches/gcc-4_8-branch) +@@ -0,0 +1,18 @@ ++/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */ ++/* { dg-options "-O -fselective-scheduling -fno-if-conversion -fschedule-insns" } */ ++ ++int n; ++ ++void ++foo (int w, int **dnroot, int **dn) ++{ ++ int *child; ++ int *xchild = xchild; ++ for (; w < n; w++) ++ if (!dnroot) ++ { ++ dnroot = dn; ++ for (child = *dn; child; child = xchild) ++ ; ++ } ++} +Index: gcc/testsuite/gcc.dg/torture/pr61383-1.c +=================================================================== +--- a/src/gcc/testsuite/gcc.dg/torture/pr61383-1.c (.../tags/gcc_4_8_3_release) ++++ b/src/gcc/testsuite/gcc.dg/torture/pr61383-1.c (.../branches/gcc-4_8-branch) +@@ -0,0 +1,35 @@ ++/* { dg-do run } */ ++ ++int a, b = 1, c, d, e, f, g; ++ ++int ++fn1 () ++{ ++ int h; ++ for (;;) ++ { ++ g = b; ++ g = g ? 0 : 1 % g; ++ e = a + 1; ++ for (; d < 1; d = e) ++ { ++ if (f == 0) ++ h = 0; ++ else ++ h = 1 % f; ++ if (f < 1) ++ c = 0; ++ else if (h) ++ break; ++ } ++ if (b) ++ return 0; ++ } ++} ++ ++int ++main () ++{ ++ fn1 (); ++ return 0; ++} Index: gcc/testsuite/ChangeLog =================================================================== --- a/src/gcc/testsuite/ChangeLog (.../tags/gcc_4_8_3_release) +++ b/src/gcc/testsuite/ChangeLog (.../branches/gcc-4_8-branch) -@@ -1,3 +1,10 @@ +@@ -1,3 +1,42 @@ ++2014-06-04 Richard Biener <rguenther@suse.de> ++ ++ PR tree-optimization/61383 ++ * gcc.dg/torture/pr61383-1.c: New testcase. ++ ++2014-06-03 Andrey Belevantsev <abel@ispras.ru> ++ ++ Backport from mainline ++ 2014-05-14 Andrey Belevantsev <abel@ispras.ru> ++ ++ PR rtl-optimization/60866 ++ * gcc.dg/pr60866.c: New test. ++ ++2014-06-03 Andrey Belevantsev <abel@ispras.ru> ++ ++ Backport from mainline ++ 2014-05-14 Andrey Belevantsev <abel@ispras.ru> ++ ++ PR rtl-optimization/60901 ++ * gcc.target/i386/pr60901.c: New test. ++ ++2014-05-28 Eric Botcazou <ebotcazou@adacore.com> ++ ++ Backport from mainline ++ 2014-05-27 Eric Botcazou <ebotcazou@adacore.com> ++ ++ * gnat.dg/overflow_fixed.adb: New test. ++ ++2014-05-27 Eric Botcazou <ebotcazou@adacore.com> ++ ++ * gnat.dg/aliasing1.adb (dg-final): Robustify pattern matching. ++ +2014-05-22 Peter Bergner <bergner@vnet.ibm.com> + + Backport from mainline @@ -86,6 +594,192 @@ Index: gcc/testsuite/ChangeLog 2014-05-22 Release Manager * GCC 4.8.3 released. +Index: gcc/double-int.c +=================================================================== +--- a/src/gcc/double-int.c (.../tags/gcc_4_8_3_release) ++++ b/src/gcc/double-int.c (.../branches/gcc-4_8-branch) +@@ -616,7 +616,7 @@ + == (unsigned HOST_WIDE_INT) htwice) + && (labs_den <= ltwice))) + { +- if (*hquo < 0) ++ if (quo_neg) + /* quo = quo - 1; */ + add_double (*lquo, *hquo, + (HOST_WIDE_INT) -1, (HOST_WIDE_INT) -1, lquo, hquo); +Index: gcc/tree-ssa-ifcombine.c +=================================================================== +--- a/src/gcc/tree-ssa-ifcombine.c (.../tags/gcc_4_8_3_release) ++++ b/src/gcc/tree-ssa-ifcombine.c (.../branches/gcc-4_8-branch) +@@ -105,7 +105,11 @@ + { + gimple stmt = gsi_stmt (gsi); + ++ if (is_gimple_debug (stmt)) ++ continue; ++ + if (gimple_has_side_effects (stmt) ++ || gimple_could_trap_p (stmt) + || gimple_vuse (stmt)) + return false; + } +Index: gcc/sel-sched-ir.c +=================================================================== +--- a/src/gcc/sel-sched-ir.c (.../tags/gcc_4_8_3_release) ++++ b/src/gcc/sel-sched-ir.c (.../branches/gcc-4_8-branch) +@@ -162,7 +162,7 @@ + static void free_av_set (basic_block); + static void invalidate_av_set (basic_block); + static void extend_insn_data (void); +-static void sel_init_new_insn (insn_t, int); ++static void sel_init_new_insn (insn_t, int, int = -1); + static void finish_insns (void); + + /* Various list functions. */ +@@ -4011,9 +4011,10 @@ + return seqno; + } + +-/* Compute seqno for INSN by its preds or succs. */ ++/* Compute seqno for INSN by its preds or succs. Use OLD_SEQNO to compute ++ seqno in corner cases. */ + static int +-get_seqno_for_a_jump (insn_t insn) ++get_seqno_for_a_jump (insn_t insn, int old_seqno) + { + int seqno; + +@@ -4069,8 +4070,16 @@ + if (seqno < 0) + seqno = get_seqno_by_succs (insn); + ++ if (seqno < 0) ++ { ++ /* The only case where this could be here legally is that the only ++ unscheduled insn was a conditional jump that got removed and turned ++ into this unconditional one. Initialize from the old seqno ++ of that jump passed down to here. */ ++ seqno = old_seqno; ++ } ++ + gcc_assert (seqno >= 0); +- + return seqno; + } + +@@ -4250,22 +4259,24 @@ + } + + /* This is used to initialize spurious jumps generated by +- sel_redirect_edge (). */ ++ sel_redirect_edge (). OLD_SEQNO is used for initializing seqnos ++ in corner cases within get_seqno_for_a_jump. */ + static void +-init_simplejump_data (insn_t insn) ++init_simplejump_data (insn_t insn, int old_seqno) + { + init_expr (INSN_EXPR (insn), vinsn_create (insn, false), 0, + REG_BR_PROB_BASE, 0, 0, 0, 0, 0, 0, + vNULL, true, false, false, + false, true); +- INSN_SEQNO (insn) = get_seqno_for_a_jump (insn); ++ INSN_SEQNO (insn) = get_seqno_for_a_jump (insn, old_seqno); + init_first_time_insn_data (insn); + } + + /* Perform deferred initialization of insns. This is used to process +- a new jump that may be created by redirect_edge. */ +-void +-sel_init_new_insn (insn_t insn, int flags) ++ a new jump that may be created by redirect_edge. OLD_SEQNO is used ++ for initializing simplejumps in init_simplejump_data. */ ++static void ++sel_init_new_insn (insn_t insn, int flags, int old_seqno) + { + /* We create data structures for bb when the first insn is emitted in it. */ + if (INSN_P (insn) +@@ -4292,7 +4303,7 @@ + if (flags & INSN_INIT_TODO_SIMPLEJUMP) + { + extend_insn_data (); +- init_simplejump_data (insn); ++ init_simplejump_data (insn, old_seqno); + } + + gcc_assert (CONTAINING_RGN (BLOCK_NUM (insn)) +@@ -5578,8 +5589,7 @@ + } + + /* A wrapper for redirect_edge_and_branch_force, which also initializes +- data structures for possibly created bb and insns. Returns the newly +- added bb or NULL, when a bb was not needed. */ ++ data structures for possibly created bb and insns. */ + void + sel_redirect_edge_and_branch_force (edge e, basic_block to) + { +@@ -5586,6 +5596,7 @@ + basic_block jump_bb, src, orig_dest = e->dest; + int prev_max_uid; + rtx jump; ++ int old_seqno = -1; + + /* This function is now used only for bookkeeping code creation, where + we'll never get the single pred of orig_dest block and thus will not +@@ -5594,8 +5605,13 @@ + && !single_pred_p (orig_dest)); + src = e->src; + prev_max_uid = get_max_uid (); ++ /* Compute and pass old_seqno down to sel_init_new_insn only for the case ++ when the conditional jump being redirected may become unconditional. */ ++ if (any_condjump_p (BB_END (src)) ++ && INSN_SEQNO (BB_END (src)) >= 0) ++ old_seqno = INSN_SEQNO (BB_END (src)); ++ + jump_bb = redirect_edge_and_branch_force (e, to); +- + if (jump_bb != NULL) + sel_add_bb (jump_bb); + +@@ -5607,7 +5623,8 @@ + + jump = find_new_jump (src, jump_bb, prev_max_uid); + if (jump) +- sel_init_new_insn (jump, INSN_INIT_TODO_LUID | INSN_INIT_TODO_SIMPLEJUMP); ++ sel_init_new_insn (jump, INSN_INIT_TODO_LUID | INSN_INIT_TODO_SIMPLEJUMP, ++ old_seqno); + set_immediate_dominator (CDI_DOMINATORS, to, + recompute_dominator (CDI_DOMINATORS, to)); + set_immediate_dominator (CDI_DOMINATORS, orig_dest, +@@ -5626,6 +5643,7 @@ + edge redirected; + bool recompute_toporder_p = false; + bool maybe_unreachable = single_pred_p (orig_dest); ++ int old_seqno = -1; + + latch_edge_p = (pipelining_p + && current_loop_nest +@@ -5634,6 +5652,12 @@ + src = e->src; + prev_max_uid = get_max_uid (); + ++ /* Compute and pass old_seqno down to sel_init_new_insn only for the case ++ when the conditional jump being redirected may become unconditional. */ ++ if (any_condjump_p (BB_END (src)) ++ && INSN_SEQNO (BB_END (src)) >= 0) ++ old_seqno = INSN_SEQNO (BB_END (src)); ++ + redirected = redirect_edge_and_branch (e, to); + + gcc_assert (redirected && !last_added_blocks.exists ()); +@@ -5654,7 +5678,7 @@ + + jump = find_new_jump (src, NULL, prev_max_uid); + if (jump) +- sel_init_new_insn (jump, INSN_INIT_TODO_LUID | INSN_INIT_TODO_SIMPLEJUMP); ++ sel_init_new_insn (jump, INSN_INIT_TODO_LUID | INSN_INIT_TODO_SIMPLEJUMP, old_seqno); + + /* Only update dominator info when we don't have unreachable blocks. + Otherwise we'll update in maybe_tidy_empty_bb. */ Index: gcc/fortran/ChangeLog =================================================================== --- a/src/gcc/fortran/ChangeLog (.../tags/gcc_4_8_3_release) @@ -101,6 +795,63 @@ Index: gcc/fortran/ChangeLog 2014-05-22 Release Manager * GCC 4.8.3 released. +Index: gcc/config/i386/i386.c +=================================================================== +--- a/src/gcc/config/i386/i386.c (.../tags/gcc_4_8_3_release) ++++ b/src/gcc/config/i386/i386.c (.../branches/gcc-4_8-branch) +@@ -20505,7 +20505,7 @@ + t1 = gen_reg_rtx (V32QImode); + t2 = gen_reg_rtx (V32QImode); + t3 = gen_reg_rtx (V32QImode); +- vt2 = GEN_INT (128); ++ vt2 = GEN_INT (-128); + for (i = 0; i < 32; i++) + vec[i] = vt2; + vt = gen_rtx_CONST_VECTOR (V32QImode, gen_rtvec_v (32, vec)); +@@ -24640,13 +24640,17 @@ + { + edge e; + edge_iterator ei; +- /* Assume that region is SCC, i.e. all immediate predecessors +- of non-head block are in the same region. */ ++ ++ /* Regions are SCCs with the exception of selective ++ scheduling with pipelining of outer blocks enabled. ++ So also check that immediate predecessors of a non-head ++ block are in the same region. */ + FOR_EACH_EDGE (e, ei, bb->preds) + { + /* Avoid creating of loop-carried dependencies through +- using topological odering in region. */ +- if (BLOCK_TO_BB (bb->index) > BLOCK_TO_BB (e->src->index)) ++ using topological ordering in the region. */ ++ if (rgn == CONTAINING_RGN (e->src->index) ++ && BLOCK_TO_BB (bb->index) > BLOCK_TO_BB (e->src->index)) + add_dependee_for_func_arg (first_arg, e->src); + } + } +Index: gcc/config/aarch64/arm_neon.h +=================================================================== +--- a/src/gcc/config/aarch64/arm_neon.h (.../tags/gcc_4_8_3_release) ++++ b/src/gcc/config/aarch64/arm_neon.h (.../branches/gcc-4_8-branch) +@@ -13815,7 +13815,7 @@ + int16x4_t result; + __asm__ ("sqdmulh %0.4h,%1.4h,%2.h[0]" + : "=w"(result) +- : "w"(a), "w"(b) ++ : "w"(a), "x"(b) + : /* No clobbers */); + return result; + } +@@ -13837,7 +13837,7 @@ + int16x8_t result; + __asm__ ("sqdmulh %0.8h,%1.8h,%2.h[0]" + : "=w"(result) +- : "w"(a), "w"(b) ++ : "w"(a), "x"(b) + : /* No clobbers */); + return result; + } Index: gcc/config/rs6000/htm.md =================================================================== --- a/src/gcc/config/rs6000/htm.md (.../tags/gcc_4_8_3_release) @@ -128,6 +879,107 @@ Index: gcc/config/rs6000/rs6000.c if (GET_CODE (addr) == LO_SUM) /* For lo_sum addresses, we must allow any offset except one that +Index: gcc/config/rs6000/vsx.md +=================================================================== +--- a/src/gcc/config/rs6000/vsx.md (.../tags/gcc_4_8_3_release) ++++ b/src/gcc/config/rs6000/vsx.md (.../branches/gcc-4_8-branch) +@@ -24,6 +24,13 @@ + ;; Iterator for the 2 64-bit vector types + (define_mode_iterator VSX_D [V2DF V2DI]) + ++;; Iterator for the 2 64-bit vector types + 128-bit types that are loaded with ++;; lxvd2x to properly handle swapping words on little endian ++(define_mode_iterator VSX_LE [V2DF ++ V2DI ++ V1TI ++ (TI "VECTOR_MEM_VSX_P (TImode)")]) ++ + ;; Iterator for the 2 32-bit vector types + (define_mode_iterator VSX_W [V4SF V4SI]) + +@@ -228,8 +235,8 @@ + ;; The patterns for LE permuted loads and stores come before the general + ;; VSX moves so they match first. + (define_insn_and_split "*vsx_le_perm_load_<mode>" +- [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa") +- (match_operand:VSX_D 1 "memory_operand" "Z"))] ++ [(set (match_operand:VSX_LE 0 "vsx_register_operand" "=wa") ++ (match_operand:VSX_LE 1 "memory_operand" "Z"))] + "!BYTES_BIG_ENDIAN && TARGET_VSX" + "#" + "!BYTES_BIG_ENDIAN && TARGET_VSX" +@@ -342,8 +349,8 @@ + (set_attr "length" "8")]) + + (define_insn "*vsx_le_perm_store_<mode>" +- [(set (match_operand:VSX_D 0 "memory_operand" "=Z") +- (match_operand:VSX_D 1 "vsx_register_operand" "+wa"))] ++ [(set (match_operand:VSX_LE 0 "memory_operand" "=Z") ++ (match_operand:VSX_LE 1 "vsx_register_operand" "+wa"))] + "!BYTES_BIG_ENDIAN && TARGET_VSX" + "#" + [(set_attr "type" "vecstore") +@@ -350,8 +357,8 @@ + (set_attr "length" "12")]) + + (define_split +- [(set (match_operand:VSX_D 0 "memory_operand" "") +- (match_operand:VSX_D 1 "vsx_register_operand" ""))] ++ [(set (match_operand:VSX_LE 0 "memory_operand" "") ++ (match_operand:VSX_LE 1 "vsx_register_operand" ""))] + "!BYTES_BIG_ENDIAN && TARGET_VSX && !reload_completed" + [(set (match_dup 2) + (vec_select:<MODE> +@@ -369,8 +376,8 @@ + ;; The post-reload split requires that we re-permute the source + ;; register in case it is still live. + (define_split +- [(set (match_operand:VSX_D 0 "memory_operand" "") +- (match_operand:VSX_D 1 "vsx_register_operand" ""))] ++ [(set (match_operand:VSX_LE 0 "memory_operand" "") ++ (match_operand:VSX_LE 1 "vsx_register_operand" ""))] + "!BYTES_BIG_ENDIAN && TARGET_VSX && reload_completed" + [(set (match_dup 1) + (vec_select:<MODE> +@@ -1352,9 +1359,9 @@ + ;; xxpermdi for little endian loads and stores. We need several of + ;; these since the form of the PARALLEL differs by mode. + (define_insn "*vsx_xxpermdi2_le_<mode>" +- [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa") +- (vec_select:VSX_D +- (match_operand:VSX_D 1 "vsx_register_operand" "wa") ++ [(set (match_operand:VSX_LE 0 "vsx_register_operand" "=wa") ++ (vec_select:VSX_LE ++ (match_operand:VSX_LE 1 "vsx_register_operand" "wa") + (parallel [(const_int 1) (const_int 0)])))] + "!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (<MODE>mode)" + "xxpermdi %x0,%x1,%x1,2" +@@ -1401,9 +1408,9 @@ + ;; lxvd2x for little endian loads. We need several of + ;; these since the form of the PARALLEL differs by mode. + (define_insn "*vsx_lxvd2x2_le_<mode>" +- [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa") +- (vec_select:VSX_D +- (match_operand:VSX_D 1 "memory_operand" "Z") ++ [(set (match_operand:VSX_LE 0 "vsx_register_operand" "=wa") ++ (vec_select:VSX_LE ++ (match_operand:VSX_LE 1 "memory_operand" "Z") + (parallel [(const_int 1) (const_int 0)])))] + "!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (<MODE>mode)" + "lxvd2x %x0,%y1" +@@ -1450,9 +1457,9 @@ + ;; stxvd2x for little endian stores. We need several of + ;; these since the form of the PARALLEL differs by mode. + (define_insn "*vsx_stxvd2x2_le_<mode>" +- [(set (match_operand:VSX_D 0 "memory_operand" "=Z") +- (vec_select:VSX_D +- (match_operand:VSX_D 1 "vsx_register_operand" "wa") ++ [(set (match_operand:VSX_LE 0 "memory_operand" "=Z") ++ (vec_select:VSX_LE ++ (match_operand:VSX_LE 1 "vsx_register_operand" "wa") + (parallel [(const_int 1) (const_int 0)])))] + "!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (<MODE>mode)" + "stxvd2x %x1,%y0" Index: gcc/config/rs6000/rs6000.md =================================================================== --- a/src/gcc/config/rs6000/rs6000.md (.../tags/gcc_4_8_3_release) |