[gcc-6] 381/401: * Update to SVN 20170305 (r245899) from the gcc-6-branch.
Ximin Luo
infinity0 at debian.org
Wed Apr 5 15:50:42 UTC 2017
This is an automated email from the git hooks/post-receive script.
infinity0 pushed a commit to branch pu/reproducible_builds
in repository gcc-6.
commit 01d64f47ad6f5039e613a39ed13ef6b94f3a57ae
Author: doko <doko at 6ca36cf4-e1d1-0310-8c6f-e303bb2178ca>
Date: Mon Mar 6 08:07:39 2017 +0000
* Update to SVN 20170305 (r245899) from the gcc-6-branch.
git-svn-id: svn://anonscm.debian.org/gcccvs/branches/sid/gcc-6@9337 6ca36cf4-e1d1-0310-8c6f-e303bb2178ca
---
debian/changelog | 10 +
debian/patches/svn-updates.diff | 988 +++++++++++++++++++++++++++++++++++++++-
debian/rules.d/binary-java.mk | 2 +-
3 files changed, 975 insertions(+), 25 deletions(-)
diff --git a/debian/changelog b/debian/changelog
index bbfdab3..3238ec4 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,13 @@
+gcc-6 (6.3.0-9) UNRELEASED; urgency=medium
+
+ * Update to SVN 20170305 (r245899) from the gcc-6-branch.
+ - Fix PR target/79261 (PPC), PR fortran/78474, PR libstdc++/79789,
+ PR target/79514 (x86), PR target/79544 (PPC), PR lto/79579,
+ PR target/79749 (sparc), PR target/79261 (PPC), PR fortran/78474,
+ PR fortran/78331.
+
+ -- Matthias Klose <doko at debian.org> Sun, 05 Mar 2017 11:37:13 +0100
+
gcc-6 (6.3.0-8) unstable; urgency=medium
* Update to SVN 20170221 (r245621) from the gcc-6-branch.
diff --git a/debian/patches/svn-updates.diff b/debian/patches/svn-updates.diff
index ab6a7a9..8cb735f 100644
--- a/debian/patches/svn-updates.diff
+++ b/debian/patches/svn-updates.diff
@@ -1,10 +1,10 @@
-# DP: updates from the 6 branch upto 20170221 (r245621).
+# DP: updates from the 6 branch upto 20170305 (r245899).
last_update()
{
cat > ${dir}LAST_UPDATED <EOF
-Tue Feb 21 10:45:18 CET 2017
-Tue Feb 21 09:45:18 UTC 2017 (revision 245621)
+Sun Mar 5 11:29:27 CET 2017
+Sun Mar 5 10:29:27 UTC 2017 (revision 245899)
EOF
}
@@ -623,6 +623,23 @@ Index: libstdc++-v3/include/std/type_traits
/// @} group metaprogramming
/**
+Index: libstdc++-v3/include/std/memory
+===================================================================
+--- a/src/libstdc++-v3/include/std/memory (.../tags/gcc_6_3_0_release)
++++ b/src/libstdc++-v3/include/std/memory (.../branches/gcc-6-branch)
+@@ -133,9 +133,9 @@
+ inline void
+ declare_reachable(void*) { }
+
+-template <class T>
+- inline T*
+- undeclare_reachable(T* __p) { return __p; }
++template <typename _Tp>
++ inline _Tp*
++ undeclare_reachable(_Tp* __p) { return __p; }
+
+ inline void
+ declare_no_pointers(char*, size_t) { }
Index: libstdc++-v3/include/std/atomic
===================================================================
--- a/src/libstdc++-v3/include/std/atomic (.../tags/gcc_6_3_0_release)
@@ -1063,6 +1080,27 @@ Index: libstdc++-v3/include/bits/stl_multimap.h
#endif
//@}
+Index: libstdc++-v3/include/bits/ios_base.h
+===================================================================
+--- a/src/libstdc++-v3/include/bits/ios_base.h (.../tags/gcc_6_3_0_release)
++++ b/src/libstdc++-v3/include/bits/ios_base.h (.../branches/gcc-6-branch)
+@@ -207,12 +207,12 @@
+ const error_category& iostream_category() noexcept;
+
+ inline error_code
+- make_error_code(io_errc e) noexcept
+- { return error_code(static_cast<int>(e), iostream_category()); }
++ make_error_code(io_errc __e) noexcept
++ { return error_code(static_cast<int>(__e), iostream_category()); }
+
+ inline error_condition
+- make_error_condition(io_errc e) noexcept
+- { return error_condition(static_cast<int>(e), iostream_category()); }
++ make_error_condition(io_errc __e) noexcept
++ { return error_condition(static_cast<int>(__e), iostream_category()); }
+ #endif
+
+ // 27.4.2 Class ios_base
Index: libstdc++-v3/include/bits/predefined_ops.h
===================================================================
--- a/src/libstdc++-v3/include/bits/predefined_ops.h (.../tags/gcc_6_3_0_release)
@@ -1272,6 +1310,21 @@ Index: libstdc++-v3/include/bits/stl_multiset.h
#endif
//@}
+Index: libstdc++-v3/include/bits/mask_array.h
+===================================================================
+--- a/src/libstdc++-v3/include/bits/mask_array.h (.../tags/gcc_6_3_0_release)
++++ b/src/libstdc++-v3/include/bits/mask_array.h (.../branches/gcc-6-branch)
+@@ -136,8 +136,8 @@
+ };
+
+ template<typename _Tp>
+- inline mask_array<_Tp>::mask_array(const mask_array<_Tp>& a)
+- : _M_sz(a._M_sz), _M_mask(a._M_mask), _M_array(a._M_array) {}
++ inline mask_array<_Tp>::mask_array(const mask_array<_Tp>& __a)
++ : _M_sz(__a._M_sz), _M_mask(__a._M_mask), _M_array(__a._M_array) {}
+
+ template<typename _Tp>
+ inline
Index: libstdc++-v3/include/bits/ptr_traits.h
===================================================================
--- a/src/libstdc++-v3/include/bits/ptr_traits.h (.../tags/gcc_6_3_0_release)
@@ -1327,6 +1380,21 @@ Index: libstdc++-v3/include/bits/ptr_traits.h
};
/**
+Index: libstdc++-v3/include/bits/slice_array.h
+===================================================================
+--- a/src/libstdc++-v3/include/bits/slice_array.h (.../tags/gcc_6_3_0_release)
++++ b/src/libstdc++-v3/include/bits/slice_array.h (.../branches/gcc-6-branch)
+@@ -204,8 +204,8 @@
+
+ template<typename _Tp>
+ inline
+- slice_array<_Tp>::slice_array(const slice_array<_Tp>& a)
+- : _M_sz(a._M_sz), _M_stride(a._M_stride), _M_array(a._M_array) {}
++ slice_array<_Tp>::slice_array(const slice_array<_Tp>& __a)
++ : _M_sz(__a._M_sz), _M_stride(__a._M_stride), _M_array(__a._M_array) {}
+
+ // template<typename _Tp>
+ // inline slice_array<_Tp>::~slice_array () {}
Index: libstdc++-v3/include/bits/list.tcc
===================================================================
--- a/src/libstdc++-v3/include/bits/list.tcc (.../tags/gcc_6_3_0_release)
@@ -1427,6 +1495,22 @@ Index: libstdc++-v3/include/bits/list.tcc
}
}
+Index: libstdc++-v3/include/bits/regex.h
+===================================================================
+--- a/src/libstdc++-v3/include/bits/regex.h (.../tags/gcc_6_3_0_release)
++++ b/src/libstdc++-v3/include/bits/regex.h (.../branches/gcc-6-branch)
+@@ -2672,9 +2672,9 @@
+ initializer_list<int>,
+ regex_constants::match_flag_type =
+ regex_constants::match_default) = delete;
+- template <std::size_t N>
++ template <std::size_t _Nm>
+ regex_token_iterator(_Bi_iter, _Bi_iter, const regex_type&&,
+- const int (&)[N],
++ const int (&)[_Nm],
+ regex_constants::match_flag_type =
+ regex_constants::match_default) = delete;
+
Index: libstdc++-v3/include/bits/alloc_traits.h
===================================================================
--- a/src/libstdc++-v3/include/bits/alloc_traits.h (.../tags/gcc_6_3_0_release)
@@ -1591,7 +1675,18 @@ Index: libstdc++-v3/ChangeLog
===================================================================
--- a/src/libstdc++-v3/ChangeLog (.../tags/gcc_6_3_0_release)
+++ b/src/libstdc++-v3/ChangeLog (.../branches/gcc-6-branch)
-@@ -1,3 +1,247 @@
+@@ -1,3 +1,258 @@
++2017-03-02 Jonathan Wakely <jwakely at redhat.com>
++
++ PR libstdc++/79789
++ * include/bits/ios_base.h (make_error_code, make_error_condition):
++ Likewise.
++ * include/bits/mask_array.h (mask_array): Likewise.
++ * include/bits/regex.h (regex_token_iterator): Likewise.
++ * include/bits/slice_array.h (slice_array): Likewise.
++ * include/std/memory (undeclare_no_pointers): Likewise.
++ * testsuite/17_intro/names.cc: New test.
++
+2017-02-15 Jonathan Wakely <jwakely at redhat.com>
+
+ PR libstdc++/79114
@@ -2963,6 +3058,112 @@ Index: libstdc++-v3/testsuite/experimental/array/make_array.cc
+ auto arr = std::experimental::make_array<A>(B{}, C{});
+ static_assert(std::is_same<decltype(arr), std::array<A, 2>>::value, "");
+}
+Index: libstdc++-v3/testsuite/17_intro/names.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/17_intro/names.cc (.../tags/gcc_6_3_0_release)
++++ b/src/libstdc++-v3/testsuite/17_intro/names.cc (.../branches/gcc-6-branch)
+@@ -0,0 +1,101 @@
++// Copyright (C) 2017 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/>.
++
++// { dg-do compile }
++
++// Define macros for some common variables names that we must not use for
++// naming variables, parameters etc. in the library.
++#define tmp (
++#define A (
++#define B (
++#define C (
++#define D (
++#define E (
++#define F (
++#define G (
++#define H (
++#define I (
++#define J (
++#define K (
++#define L (
++#define M (
++#define N (
++#define O (
++#define P (
++#define Q (
++#define R (
++#define S (
++#define T (
++#define U (
++#define V (
++#define W (
++#define X (
++#define Y (
++#define Z (
++#if __cplusplus >= 201103L
++// <random> defines member functions called a() and b()
++#else
++#define a (
++#define b (
++#endif
++// <queue> and <stack> defined data members called c
++#define d (
++#define e (
++#define f (
++#define g (
++#if __cplusplus >= 201402L
++// <chrono> defines operator ""h in C++14
++// <complex> defines operator ""i in C++14
++#else
++#define h (
++#define i (
++#endif
++#define j (
++#if __cplusplus >= 201103L
++// <random> defines member functions called k()
++#else
++#define k (
++#endif
++#define l (
++#if __cplusplus >= 201103L
++// <random> defines member functions called m() and n()
++#else
++#define m (
++#define n (
++#endif
++#define o (
++#if __cplusplus >= 201103L
++// <random> defines member functions called p()
++#else
++#define p (
++#endif
++#define q (
++#define r (
++#if __cplusplus >= 201103L
++// <random> defines member functions called s() and t()
++// <chrono> and <string> define operator ""s in C++14
++#else
++#define s (
++#define t (
++#endif
++#define u (
++#define v (
++#define w (
++#define x (
++#define y (
++#define z (
++#include <bits/stdc++.h>
Index: libstdc++-v3/testsuite/libstdc++-xmethods/shared_ptr.cc
===================================================================
--- a/src/libstdc++-v3/testsuite/libstdc++-xmethods/shared_ptr.cc (.../tags/gcc_6_3_0_release)
@@ -3725,7 +3926,7 @@ Index: gcc/DATESTAMP
+++ b/src/gcc/DATESTAMP (.../branches/gcc-6-branch)
@@ -1 +1 @@
-20161221
-+20170221
++20170305
Index: gcc/postreload.c
===================================================================
--- a/src/gcc/postreload.c (.../tags/gcc_6_3_0_release)
@@ -4170,7 +4371,51 @@ Index: gcc/ChangeLog
===================================================================
--- a/src/gcc/ChangeLog (.../tags/gcc_6_3_0_release)
+++ b/src/gcc/ChangeLog (.../branches/gcc-6-branch)
-@@ -1,3 +1,729 @@
+@@ -1,3 +1,773 @@
++2017-03-02 Uros Bizjak <ubizjak at gmail.com>
++
++ PR target/79514
++ * config/i386/i386.md (*pushxf_rounded): New insn_and_split pattern.
++
++2017-03-01 Pat Haugen <pthaugen at us.ibm.com>
++
++ Backport from mainline:
++ 2017-02-27 Pat Haugen <pthaugen at us.ibm.com>
++
++ PR target/79544
++ * rs6000/rs6000-c.c (struct altivec_builtin_types): Use VSRAD for
++ arithmetic shift of unsigned V2DI.
++
++2017-03-01 Martin Jambor <mjambor at suse.cz>
++
++ Backport from mainline
++ 2017-02-21 Martin Jambor <mjambor at suse.cz>
++
++ PR lto/79579
++ * ipa-prop.c (ipa_prop_write_jump_functions): Bail out if no edges
++ have been analyzed.
++
++2017-02-28 Eric Botcazou <ebotcazou at adacore.com>
++
++ PR target/79749
++ * config/sparc/sparc.c (sparc_frame_pointer_required): Add missing
++ condition on optimize for the leaf function test.
++
++2017-02-22 Bill Schmidt <wschmidt at linux.vnet.ibm.com>
++
++ Backport from mainline
++ 2017-02-17 Bill Schmidt <wschmidt at linux.vnet.ibm.com>
++
++ PR target/79261
++ * config/rs6000/rs6000.c (rs6000_expand_ternop_builtin): Add
++ support for CODE_FOR_vsx_xxpermdi_v2d[fi]_be.
++ * config/rs6000/rs6000.md (reload_gpr_from_vsx<mode>): Call
++ generator for vsx_xxpermdi_<mode>_be.
++ * config/rs6000/vsx.md (vsx_xxpermdi_<mode>): Remove logic to
++ force big-endian semantics.
++ (vsx_xxpermdi_<mode>_be): New define_expand with same
++ implementation as previous version of vsx_xxpermdi_<mode>.
++
+2017-02-20 Marek Polacek <polacek at redhat.com>
+
+ Backport from mainline
@@ -4900,7 +5145,7 @@ Index: gcc/ChangeLog
2016-12-21 Release Manager
* GCC 6.3.0 released.
-@@ -68,11 +798,11 @@
+@@ -68,11 +842,11 @@
Backport from mainline
2016-11-07 Bernd Schmidt <bschmidt at redhat.com>
@@ -5692,9 +5937,10 @@ Index: gcc/testsuite/gcc.target/powerpc/pr79268.c
===================================================================
--- a/src/gcc/testsuite/gcc.target/powerpc/pr79268.c (.../tags/gcc_6_3_0_release)
+++ b/src/gcc/testsuite/gcc.target/powerpc/pr79268.c (.../branches/gcc-6-branch)
-@@ -0,0 +1,18 @@
-+/* { dg-do compile { target { powerpc64le-*-* } } } */
+@@ -0,0 +1,19 @@
++/* { dg-do compile { target { powerpc64*-*-* && lp64 } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
++/* { dg-skip-if "" { powerpc*-*-darwin* powerpc-*-aix* } } */
+/* { dg-options "-mcpu=power8 -O3 " } */
+
+/* Verify that vec_xl and vec_xst accept vector pixel parameters. */
@@ -5758,6 +6004,79 @@ Index: gcc/testsuite/gcc.target/powerpc/pr79197.c
+{
+ a = *(double *) (__UINTPTR_TYPE__) 0x400000;
+}
+Index: gcc/testsuite/gcc.target/powerpc/vec-xxpermdi.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/powerpc/vec-xxpermdi.c (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gcc.target/powerpc/vec-xxpermdi.c (.../branches/gcc-6-branch)
+@@ -0,0 +1,68 @@
++/* { dg-do run { target { powerpc64*-*-* && vsx_hw } } } */
++/* { dg-options "-O2 -mvsx" } */
++
++/* Added for PR79261 to test that vec_xxpermdi works correctly for
++ both BE and LE targets. */
++
++#include <altivec.h>
++void abort (void);
++
++vector double vdx = { 0.0, 1.0 };
++vector double vdy = { 2.0, 3.0 };
++vector double vdz;
++
++vector signed long long vsllx = { 0, 1 };
++vector signed long long vslly = { 2, 3 };
++vector signed long long vsllz;
++
++vector float vfx = { 0.0, 1.0, 2.0, 3.0 };
++vector float vfy = { 4.0, 5.0, 6.0, 7.0 };
++vector float vfz;
++
++vector signed int vsix = { 0, 1, 2, 3 };
++vector signed int vsiy = { 4, 5, 6, 7 };
++vector signed int vsiz;
++
++vector signed short vssx = { 0, 1, 2, 3, 4, 5, 6, 7 };
++vector signed short vssy = { 8, 9, 10, 11, 12, 13, 14, 15 };
++vector signed short vssz;
++
++vector signed char vscx = { 0, 1, 2, 3, 4, 5, 6, 7,
++ 8, 9, 10, 11, 12, 13, 14, 15 };
++vector signed char vscy = { 16, 17, 18, 19, 20, 21, 22, 23,
++ 24, 25, 26, 27, 28, 29, 30, 31 };
++vector signed char vscz;
++
++int
++main ()
++{
++ vdz = vec_xxpermdi (vdx, vdy, 0b01);
++ if (vdz[0] != 0.0 || vdz[1] != 3.0)
++ abort ();
++
++ vsllz = vec_xxpermdi (vsllx, vslly, 0b10);
++ if (vsllz[0] != 1 || vsllz[1] != 2)
++ abort ();
++
++ vfz = vec_xxpermdi (vfx, vfy, 0b01);
++ if (vfz[0] != 0.0 || vfz[1] != 1.0 || vfz[2] != 6.0 || vfz[3] != 7.0)
++ abort ();
++
++ vsiz = vec_xxpermdi (vsix, vsiy, 0b10);
++ if (vsiz[0] != 2 || vsiz[1] != 3 || vsiz[2] != 4 || vsiz[3] != 5)
++ abort ();
++
++ vssz = vec_xxpermdi (vssx, vssy, 0b00);
++ if (vssz[0] != 0 || vssz[1] != 1 || vssz[2] != 2 || vssz[3] != 3
++ || vssz[4] != 8 || vssz[5] != 9 || vssz[6] != 10 || vssz[7] != 11)
++ abort ();
++
++ vscz = vec_xxpermdi (vscx, vscy, 0b11);
++ if (vscz[0] != 8 || vscz[1] != 9 || vscz[2] != 10 || vscz[3] != 11
++ || vscz[4] != 12 || vscz[5] != 13 || vscz[6] != 14 || vscz[7] != 15
++ || vscz[8] != 24 || vscz[9] != 25 || vscz[10] != 26 || vscz[11] != 27
++ || vscz[12] != 28 || vscz[13] != 29 || vscz[14] != 30 || vscz[15] != 31)
++ abort ();
++
++ return 0;
++}
Index: gcc/testsuite/gcc.target/powerpc/vsx-builtin-3.c
===================================================================
--- a/src/gcc/testsuite/gcc.target/powerpc/vsx-builtin-3.c (.../tags/gcc_6_3_0_release)
@@ -5871,6 +6190,32 @@ Index: gcc/testsuite/gcc.target/powerpc/swaps-p8-27.c
+ dest = __builtin_vsx_xxpermdi (source1, c, 1);
+ *(__m128d *)d = dest;
+}
+Index: gcc/testsuite/gcc.target/powerpc/pr79544.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/powerpc/pr79544.c (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gcc.target/powerpc/pr79544.c (.../branches/gcc-6-branch)
+@@ -0,0 +1,21 @@
++/* { dg-do compile { target { powerpc*-*-* } } } */
++/* { dg-require-effective-target powerpc_p8vector_ok } */
++/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
++/* { dg-options "-mcpu=power8 -O2" } */
++
++#include <altivec.h>
++
++vector unsigned long long
++test_sra (vector unsigned long long x, vector unsigned long long y)
++{
++ return vec_sra (x, y);
++}
++
++vector unsigned long long
++test_vsrad (vector unsigned long long x, vector unsigned long long y)
++{
++ return vec_vsrad (x, y);
++}
++
++/* { dg-final { scan-assembler-times {\mvsrad\M} 2 } } */
++
Index: gcc/testsuite/gcc.target/arm/pr78255-1.c
===================================================================
--- a/src/gcc/testsuite/gcc.target/arm/pr78255-1.c (.../tags/gcc_6_3_0_release)
@@ -6039,6 +6384,31 @@ Index: gcc/testsuite/gcc.target/s390/litpool-str-1.c
+}
+
+/* { dg-final { scan-assembler-not "GOTOFF" } } */
+Index: gcc/testsuite/gcc.target/sparc/20170228-1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/sparc/20170228-1.c (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gcc.target/sparc/20170228-1.c (.../branches/gcc-6-branch)
+@@ -0,0 +1,20 @@
++/* PR target/79749 */
++/* Reported by Rainer Orth <ro at gcc.gnu.org> */
++
++/* { dg-do run } */
++/* { dg-options "-fomit-frame-pointer" } */
++
++extern void abort (void);
++
++int foo (int x1, int x2, int x3, int x4, int x5, int x6, int x7)
++{
++ return x7;
++}
++
++int main (void)
++{
++ if (foo (100, 200, 300, 400, 500, 600, 700) != 700)
++ abort ();
++
++ return 0;
++}
Index: gcc/testsuite/gcc.target/aarch64/pr78255.c
===================================================================
--- a/src/gcc/testsuite/gcc.target/aarch64/pr78255.c (.../tags/gcc_6_3_0_release)
@@ -6164,6 +6534,23 @@ Index: gcc/testsuite/gcc.target/i386/pr49095.c
-/* See PR61225 for the XFAIL. */
-/* { dg-final { scan-assembler-not "test\[lq\]" { xfail { ia32 } } } } */
+/* { dg-final { scan-assembler-not "test\[lq\]" } } */
+Index: gcc/testsuite/gcc.target/i386/pr79514.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/i386/pr79514.c (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gcc.target/i386/pr79514.c (.../branches/gcc-6-branch)
+@@ -0,0 +1,12 @@
++/* PR target/79514 */
++/* { dg-do compile } */
++/* { dg-options "-m96bit-long-double" } */
++
++extern void bar (long double);
++
++extern long double x;
++
++void foo (void)
++{
++ bar (x);
++}
Index: gcc/testsuite/gcc.target/i386/pr79495.c
===================================================================
--- a/src/gcc/testsuite/gcc.target/i386/pr79495.c (.../tags/gcc_6_3_0_release)
@@ -6281,6 +6668,82 @@ Index: gcc/testsuite/gfortran.dg/coarray_event_1.f08
+ event post (x[1])
+ end subroutine
+end
+Index: gcc/testsuite/gfortran.dg/submodule_22.f08
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/submodule_22.f08 (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gfortran.dg/submodule_22.f08 (.../branches/gcc-6-branch)
+@@ -0,0 +1,47 @@
++! { dg-do compile }
++!
++! Test the fix for PR78474.
++!
++! Contributed by Nicholas Brearly <nick.brealey at cobham.com>
++!
++module mtop
++ implicit none
++ real :: r
++ interface
++ module subroutine sub1()
++ end subroutine
++ end interface
++ interface
++ module subroutine sub2()
++ end subroutine
++ end interface
++ interface
++ module subroutine sub3()
++ end subroutine
++ end interface
++end module mtop
++
++submodule (mtop) submod
++ implicit none
++ real :: s
++contains
++ module subroutine sub1
++ r = 0.0
++ end subroutine sub1
++end
++
++submodule (mtop:submod) subsubmod
++contains
++ module subroutine sub2
++ r = 1.0
++ s = 1.0
++ end subroutine sub2
++end
++
++submodule (mtop:submod:subsubmod) subsubsubmod ! { dg-error "Syntax error in SUBMODULE statement" }
++contains
++ module subroutine sub3
++ r = 2.0
++ s = 2.0
++ end subroutine sub3
++end
+Index: gcc/testsuite/gfortran.dg/submodule_21.f08
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/submodule_21.f08 (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gfortran.dg/submodule_21.f08 (.../branches/gcc-6-branch)
+@@ -0,0 +1,19 @@
++! { dg-do compile }
++!
++! Test the fix for PR78331.
++!
++! Reported on https://groups.google.com/forum/#!topic/comp.lang.fortran/NFCF9brKksg
++!
++MODULE MainModule
++END MODULE MainModule
++
++SUBMODULE (MainModule) MySub1
++ IMPLICIT NONE
++ INTEGER, PARAMETER :: a = 17
++END SUBMODULE MySub1
++
++PROGRAM MyProg
++ USE MainModule
++ WRITE(*,*) a
++END PROGRAM MyProg
++! { dg-excess-errors "does not contain a MODULE PROCEDURE" }
Index: gcc/testsuite/gfortran.dg/fimplicit_none_2.f90
===================================================================
--- a/src/gcc/testsuite/gfortran.dg/fimplicit_none_2.f90 (.../tags/gcc_6_3_0_release)
@@ -6548,6 +7011,30 @@ Index: gcc/testsuite/gnat.dg/array28.adb
+ raise Program_Error;
+ end if;
+end;
+Index: gcc/testsuite/gnat.dg/opt63.adb
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/opt63.adb (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/testsuite/gnat.dg/opt63.adb (.../branches/gcc-6-branch)
+@@ -0,0 +1,19 @@
++-- { dg-do compile }
++-- { dg-options "-O -gnatws" }
++
++procedure Opt63 is
++
++ type T_MOD is mod 2**32;
++ subtype T_INDEX is T_MOD range 3_000_000_000 .. 4_000_000_000;
++ type T_ARRAY is array(T_INDEX range <>) of INTEGER;
++
++ function Build_Crash(First : T_INDEX; Length : NATURAL) return T_ARRAY is
++ R : T_ARRAY(First .. T_Index'Val (T_Index'Pos (First) + Length))
++ := (others => -1); -- Crash here
++ begin
++ return R;
++ end;
++
++begin
++ null;
++end;
Index: gcc/testsuite/gnat.dg/array26_pkg.adb
===================================================================
--- a/src/gcc/testsuite/gnat.dg/array26_pkg.adb (.../tags/gcc_6_3_0_release)
@@ -6988,7 +7475,54 @@ Index: gcc/testsuite/ChangeLog
===================================================================
--- a/src/gcc/testsuite/ChangeLog (.../tags/gcc_6_3_0_release)
+++ b/src/gcc/testsuite/ChangeLog (.../branches/gcc-6-branch)
-@@ -1,3 +1,401 @@
+@@ -1,3 +1,448 @@
++2017-03-02 Uros Bizjak <ubizjak at gmail.com>
++
++ PR target/79514
++ * gcc.target/i386/pr79514.c: New test.
++
++2017-03-01 Pat Haugen <pthaugen at us.ibm.com>
++
++ Backport from mainline:
++ 2017-03-01 Pat Haugen <pthaugen at us.ibm.com>
++
++ * gcc.target/powerpc/pr79544.c: Add test for vec_vsrad and fix up
++ scan string.
++
++ 2017-02-27 Pat Haugen <pthaugen at us.ibm.com>
++
++ PR target/79544
++ * gcc.target/powerpc/pr79544.c: New.
++
++2017-02-28 Eric Botcazou <ebotcazou at adacore.com>
++
++ * gcc.target/sparc/20170228-1.c: New test.
++
++2017-02-25 Paul Thomas <pault at gcc.gnu.org>
++
++ PR fortran/78474
++ * gfortran.dg/submodule_22.f08: New test.
++
++ PR fortran/78331
++ * gfortran.dg/submodule_21.f08: New test.
++
++2017-02-24 Eric Botcazou <ebotcazou at adacore.com>
++
++ * gnat.dg/opt63.adb: New test.
++
++2017-02-23 Bill Schmidt <wschmidt at linux.vnet.ibm.com>
++
++ PR target/79268
++ * gcc.target/powerpc/pr79268.c: Enable for BE targets also.
++
++2017-02-22 Bill Schmidt <wschmidt at linux.vnet.ibm.com>
++
++ Backport from mainline
++ 2017-02-17 Bill Schmidt <wschmidt at linux.vnet.ibm.com>
++
++ PR target/79261
++ * gcc.target/powerpc/vec-xxpermdi.c: New file.
++
+2017-02-20 Marek Polacek <polacek at redhat.com>
+
+ Backport from mainline
@@ -7390,7 +7924,7 @@ Index: gcc/testsuite/ChangeLog
2016-12-21 Release Manager
* GCC 6.3.0 released.
-@@ -46,8 +444,8 @@
+@@ -46,8 +491,8 @@
Backport from mainline
2016-11-07 Bernd Schmidt <bschmidt at redhat.com>
@@ -7401,7 +7935,7 @@ Index: gcc/testsuite/ChangeLog
2016-12-12 Thomas Preud'homme <thomas.preudhomme at arm.com>
-@@ -456,7 +854,7 @@
+@@ -456,7 +901,7 @@
* g++.dg/torture/pr77822.C: New test.
2016-11-20 Harald Anlauf <anlauf at gmx.de>
@@ -9328,7 +9862,30 @@ Index: gcc/ada/ChangeLog
===================================================================
--- a/src/gcc/ada/ChangeLog (.../tags/gcc_6_3_0_release)
+++ b/src/gcc/ada/ChangeLog (.../branches/gcc-6-branch)
-@@ -1,3 +1,7 @@
+@@ -1,3 +1,30 @@
++2017-02-24 Eric Botcazou <ebotcazou at adacore.com>
++
++ * gcc-interface/decl.c (gnat_to_gnu_field): Do not remove the wrapper
++ around a justified modular type if it doesn't have the same scalar
++ storage order as the enclosing record type.
++
++2017-02-24 Eric Botcazou <ebotcazou at adacore.com>
++
++ * gcc-interface/trans.c (gnat_to_gnu): Do not apply special handling
++ of boolean rvalues to function calls.
++
++2017-02-24 Eric Botcazou <ebotcazou at adacore.com>
++
++ * gcc-interface/utils.c (fold_bit_position): New function.
++ (rest_of_record_type_compilation): Call it instead of bit_position to
++ compute the field position and remove the call to remove_conversions.
++ (compute_related_constant): Factor out the multiplication in both
++ operands, if any, and streamline the final test.
++
++2017-02-24 Eric Botcazou <ebotcazou at adacore.com>
++
++ * gcc-interface/trans.c (return_value_ok_for_nrv_p): Add sanity check.
++
+2017-02-12 John Marino <gnugcc at marino.st>
+
+ * gcc-interface/Makefile.in: Support aarch64-freebsd.
@@ -9336,6 +9893,106 @@ Index: gcc/ada/ChangeLog
2016-12-21 Release Manager
* GCC 6.3.0 released.
+Index: gcc/ada/gcc-interface/utils.c
+===================================================================
+--- a/src/gcc/ada/gcc-interface/utils.c (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/ada/gcc-interface/utils.c (.../branches/gcc-6-branch)
+@@ -238,6 +238,7 @@
+ hash_table<pad_type_hasher> *pad_type_hash_table;
+
+ static tree merge_sizes (tree, tree, tree, bool, bool);
++static tree fold_bit_position (const_tree);
+ static tree compute_related_constant (tree, tree);
+ static tree split_plus (tree, tree *);
+ static tree float_type_for_precision (int, machine_mode);
+@@ -2021,15 +2022,11 @@
+ {
+ tree field_type = TREE_TYPE (old_field);
+ tree field_name = DECL_NAME (old_field);
+- tree curpos = bit_position (old_field);
++ tree curpos = fold_bit_position (old_field);
+ tree pos, new_field;
+ bool var = false;
+ unsigned int align = 0;
+
+- /* We're going to do some pattern matching below so remove as many
+- conversions as possible. */
+- curpos = remove_conversions (curpos, true);
+-
+ /* See how the position was modified from the last position.
+
+ There are two basic cases we support: a value was added
+@@ -2126,7 +2123,7 @@
+ is when there are other components at fixed positions after
+ it (meaning there was a rep clause for every field) and we
+ want to be able to encode them. */
+- last_pos = size_binop (PLUS_EXPR, bit_position (old_field),
++ last_pos = size_binop (PLUS_EXPR, curpos,
+ (TREE_CODE (TREE_TYPE (old_field))
+ == QUAL_UNION_TYPE)
+ ? bitsize_zero_node
+@@ -2181,6 +2178,23 @@
+ return new_size;
+ }
+
++/* Return the bit position of FIELD, in bits from the start of the record,
++ and fold it as much as possible. This is a tree of type bitsizetype. */
++
++static tree
++fold_bit_position (const_tree field)
++{
++ tree offset = DECL_FIELD_OFFSET (field);
++ if (TREE_CODE (offset) == MULT_EXPR || TREE_CODE (offset) == PLUS_EXPR)
++ offset = size_binop (TREE_CODE (offset),
++ fold_convert (bitsizetype, TREE_OPERAND (offset, 0)),
++ fold_convert (bitsizetype, TREE_OPERAND (offset, 1)));
++ else
++ offset = fold_convert (bitsizetype, offset);
++ return size_binop (PLUS_EXPR, DECL_FIELD_BIT_OFFSET (field),
++ size_binop (MULT_EXPR, offset, bitsize_unit_node));
++}
++
+ /* Utility function of above to see if OP0 and OP1, both of SIZETYPE, are
+ related by the addition of a constant. Return that constant if so. */
+
+@@ -2187,17 +2201,28 @@
+ static tree
+ compute_related_constant (tree op0, tree op1)
+ {
+- tree op0_var, op1_var;
+- tree op0_con = split_plus (op0, &op0_var);
+- tree op1_con = split_plus (op1, &op1_var);
+- tree result = size_binop (MINUS_EXPR, op0_con, op1_con);
++ tree factor, op0_var, op1_var, op0_cst, op1_cst, result;
+
++ if (TREE_CODE (op0) == MULT_EXPR
++ && TREE_CODE (op1) == MULT_EXPR
++ && TREE_CODE (TREE_OPERAND (op0, 1)) == INTEGER_CST
++ && TREE_OPERAND (op1, 1) == TREE_OPERAND (op0, 1))
++ {
++ factor = TREE_OPERAND (op0, 1);
++ op0 = TREE_OPERAND (op0, 0);
++ op1 = TREE_OPERAND (op1, 0);
++ }
++ else
++ factor = NULL_TREE;
++
++ op0_cst = split_plus (op0, &op0_var);
++ op1_cst = split_plus (op1, &op1_var);
++ result = size_binop (MINUS_EXPR, op0_cst, op1_cst);
++
+ if (operand_equal_p (op0_var, op1_var, 0))
+- return result;
+- else if (operand_equal_p (op0, size_binop (PLUS_EXPR, op1_var, result), 0))
+- return result;
+- else
+- return 0;
++ return factor ? size_binop (MULT_EXPR, factor, result) : result;
++
++ return NULL_TREE;
+ }
+
+ /* Utility function of above to split a tree OP which may be a sum, into a
Index: gcc/ada/gcc-interface/Makefile.in
===================================================================
--- a/src/gcc/ada/gcc-interface/Makefile.in (.../tags/gcc_6_3_0_release)
@@ -9375,6 +10032,83 @@ Index: gcc/ada/gcc-interface/Makefile.in
# x86 FreeBSD
ifeq ($(strip $(filter-out %86 freebsd%,$(target_cpu) $(target_os))),)
LIBGNAT_TARGET_PAIRS = \
+Index: gcc/ada/gcc-interface/decl.c
+===================================================================
+--- a/src/gcc/ada/gcc-interface/decl.c (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/ada/gcc-interface/decl.c (.../branches/gcc-6-branch)
+@@ -6685,6 +6685,7 @@
+ gnat_to_gnu_field (Entity_Id gnat_field, tree gnu_record_type, int packed,
+ bool definition, bool debug_info_p)
+ {
++ const Entity_Id gnat_record_type = Underlying_Type (Scope (gnat_field));
+ const Entity_Id gnat_field_type = Etype (gnat_field);
+ const bool is_aliased
+ = Is_Aliased (gnat_field);
+@@ -6771,8 +6772,7 @@
+ if (Present (Component_Clause (gnat_field)))
+ {
+ Node_Id gnat_clause = Component_Clause (gnat_field);
+- Entity_Id gnat_parent
+- = Parent_Subtype (Underlying_Type (Scope (gnat_field)));
++ Entity_Id gnat_parent = Parent_Subtype (gnat_record_type);
+
+ gnu_pos = UI_To_gnu (Component_Bit_Offset (gnat_field), bitsizetype);
+ gnu_size = validate_size (Esize (gnat_field), gnu_field_type,
+@@ -6891,7 +6891,7 @@
+
+ /* If the record has rep clauses and this is the tag field, make a rep
+ clause for it as well. */
+- else if (Has_Specified_Layout (Scope (gnat_field))
++ else if (Has_Specified_Layout (gnat_record_type)
+ && Chars (gnat_field) == Name_uTag)
+ {
+ gnu_pos = bitsize_zero_node;
+@@ -6928,11 +6928,14 @@
+ /* If the field's type is justified modular, we would need to remove
+ the wrapper to (better) meet the layout requirements. However we
+ can do so only if the field is not aliased to preserve the unique
+- layout and if the prescribed size is not greater than that of the
+- packed array to preserve the justification. */
++ layout, if it has the same storage order as the enclosing record
++ and if the prescribed size is not greater than that of the packed
++ array to preserve the justification. */
+ if (!needs_strict_alignment
+ && TREE_CODE (gnu_field_type) == RECORD_TYPE
+ && TYPE_JUSTIFIED_MODULAR_P (gnu_field_type)
++ && TYPE_REVERSE_STORAGE_ORDER (gnu_field_type)
++ == Reverse_Storage_Order (gnat_record_type)
+ && tree_int_cst_compare (gnu_size, TYPE_ADA_SIZE (gnu_field_type))
+ <= 0)
+ gnu_field_type = TREE_TYPE (TYPE_FIELDS (gnu_field_type));
+Index: gcc/ada/gcc-interface/trans.c
+===================================================================
+--- a/src/gcc/ada/gcc-interface/trans.c (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/ada/gcc-interface/trans.c (.../branches/gcc-6-branch)
+@@ -3600,9 +3600,16 @@
+ if (TREE_ADDRESSABLE (ret_val))
+ return false;
+
++ /* For the constrained case, test for overalignment. */
+ if (ret_obj && DECL_ALIGN (ret_val) > DECL_ALIGN (ret_obj))
+ return false;
+
++ /* For the unconstrained case, test for bogus initialization. */
++ if (!ret_obj
++ && DECL_INITIAL (ret_val)
++ && TREE_CODE (DECL_INITIAL (ret_val)) == NULL_EXPR)
++ return false;
++
+ return true;
+ }
+
+@@ -7696,7 +7703,6 @@
+ && (kind == N_Identifier
+ || kind == N_Expanded_Name
+ || kind == N_Explicit_Dereference
+- || kind == N_Function_Call
+ || kind == N_Indexed_Component
+ || kind == N_Selected_Component)
+ && TREE_CODE (get_base_type (gnu_result_type)) == BOOLEAN_TYPE
Index: gcc/asan.c
===================================================================
--- a/src/gcc/asan.c (.../tags/gcc_6_3_0_release)
@@ -9517,7 +10251,18 @@ Index: gcc/fortran/ChangeLog
===================================================================
--- a/src/gcc/fortran/ChangeLog (.../tags/gcc_6_3_0_release)
+++ b/src/gcc/fortran/ChangeLog (.../branches/gcc-6-branch)
-@@ -1,3 +1,48 @@
+@@ -1,3 +1,59 @@
++2017-02-25 Paul Thomas <pault at gcc.gnu.org>
++
++ PR fortran/78474
++ * module.c (gfc_match_submodule): If there is more than one
++ colon, it is a syntax error.
++
++ PR fortran/78331
++ * module.c (gfc_use_module): If an smod file does not exist it
++ is either because the module does not have a module procedure
++ interface or there is an error in the module.
++
+2017-02-07 Steven G. Kargl <kargl at gcc.gnu.org>
+
+ * trans-types.c (gfc_get_int_kind_from_width_isofortranen): Choose
@@ -9566,6 +10311,60 @@ Index: gcc/fortran/ChangeLog
2016-12-21 Release Manager
* GCC 6.3.0 released.
+Index: gcc/fortran/module.c
+===================================================================
+--- a/src/gcc/fortran/module.c (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/fortran/module.c (.../branches/gcc-6-branch)
+@@ -740,6 +740,7 @@
+ match m;
+ char name[GFC_MAX_SYMBOL_LEN + 1];
+ gfc_use_list *use_list;
++ bool seen_colon = false;
+
+ if (!gfc_notify_std (GFC_STD_F2008, "SUBMODULE declaration at %C"))
+ return MATCH_ERROR;
+@@ -772,7 +773,7 @@
+ }
+ else
+ {
+- module_list = use_list;
++ module_list = use_list;
+ use_list->module_name = gfc_get_string (name);
+ use_list->submodule_name = use_list->module_name;
+ }
+@@ -780,8 +781,11 @@
+ if (gfc_match_char (')') == MATCH_YES)
+ break;
+
+- if (gfc_match_char (':') != MATCH_YES)
++ if (gfc_match_char (':') != MATCH_YES
++ || seen_colon)
+ goto syntax;
++
++ seen_colon = true;
+ }
+
+ m = gfc_match (" %s%t", &gfc_new_block);
+@@ -6917,8 +6921,17 @@
+ }
+
+ if (module_fp == NULL)
+- gfc_fatal_error ("Can't open module file %qs for reading at %C: %s",
+- filename, xstrerror (errno));
++ {
++ if (gfc_state_stack->state != COMP_SUBMODULE
++ && module->submodule_name == NULL)
++ gfc_fatal_error ("Can't open module file %qs for reading at %C: %s",
++ filename, xstrerror (errno));
++ else
++ gfc_fatal_error ("Module file %qs has not been generated, either "
++ "because the module does not contain a MODULE "
++ "PROCEDURE or there is an error in the module.",
++ filename);
++ }
+
+ /* Check that we haven't already USEd an intrinsic module with the
+ same name. */
Index: gcc/fortran/trans-types.c
===================================================================
--- a/src/gcc/fortran/trans-types.c (.../tags/gcc_6_3_0_release)
@@ -9842,6 +10641,19 @@ Index: gcc/lto/lto-lang.c
/* Initialize the compiler back end. */
return false;
}
+Index: gcc/ipa-prop.c
+===================================================================
+--- a/src/gcc/ipa-prop.c (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/ipa-prop.c (.../branches/gcc-6-branch)
+@@ -4745,7 +4745,7 @@
+ lto_symtab_encoder_iterator lsei;
+ lto_symtab_encoder_t encoder;
+
+- if (!ipa_node_params_sum)
++ if (!ipa_node_params_sum || !ipa_edge_args_vector)
+ return;
+
+ ob = create_output_block (LTO_section_jump_functions);
Index: gcc/po/exgettext
===================================================================
--- a/src/gcc/po/exgettext (.../tags/gcc_6_3_0_release)
@@ -51433,6 +52245,22 @@ Index: gcc/config/nvptx/nvptx.c
/* Detect single iteration loop. */
if (fs == 1)
fs = 0;
+Index: gcc/config/sparc/sparc.c
+===================================================================
+--- a/src/gcc/config/sparc/sparc.c (.../tags/gcc_6_3_0_release)
++++ b/src/gcc/config/sparc/sparc.c (.../branches/gcc-6-branch)
+@@ -11970,8 +11970,9 @@
+ if (TARGET_FLAT)
+ return false;
+
+- /* Otherwise, the frame pointer is required if the function isn't leaf. */
+- return !(crtl->is_leaf && only_leaf_regs_used ());
++ /* Otherwise, the frame pointer is required if the function isn't leaf, but
++ we cannot use sparc_leaf_function_p since it hasn't been computed yet. */
++ return !(optimize > 0 && crtl->is_leaf && only_leaf_regs_used ());
+ }
+
+ /* The way this is structured, we can't eliminate SFP in favor of SP
Index: gcc/config/i386/stringop.opt
===================================================================
--- a/src/gcc/config/i386/stringop.opt (.../tags/gcc_6_3_0_release)
@@ -51473,7 +52301,44 @@ Index: gcc/config/i386/i386.md
===================================================================
--- a/src/gcc/config/i386/i386.md (.../tags/gcc_6_3_0_release)
+++ b/src/gcc/config/i386/i386.md (.../branches/gcc-6-branch)
-@@ -3172,9 +3172,9 @@
+@@ -2938,6 +2938,36 @@
+ operands[0] = replace_equiv_address (operands[0], stack_pointer_rtx);
+ })
+
++(define_insn_and_split "*pushxf_rounded"
++ [(set (mem:XF
++ (pre_modify:P
++ (reg:P SP_REG)
++ (plus:P (reg:P SP_REG) (const_int -16))))
++ (match_operand:XF 0 "nonmemory_no_elim_operand" "f,r,*r,C"))]
++ "TARGET_64BIT"
++ "#"
++ "&& 1"
++ [(set (reg:P SP_REG) (plus:P (reg:P SP_REG) (const_int -16)))
++ (set (match_dup 1) (match_dup 0))]
++{
++ rtx pat = PATTERN (curr_insn);
++ operands[1] = SET_DEST (pat);
++
++ /* Preserve memory attributes. */
++ operands[1] = replace_equiv_address (operands[1], stack_pointer_rtx);
++}
++ [(set_attr "type" "multi")
++ (set_attr "unit" "i387,*,*,*")
++ (set (attr "mode")
++ (cond [(eq_attr "alternative" "1,2,3")
++ (const_string "DI")
++ ]
++ (const_string "XF")))
++ (set (attr "preferred_for_size")
++ (cond [(eq_attr "alternative" "1")
++ (symbol_ref "false")]
++ (symbol_ref "true")))])
++
+ (define_insn "*pushxf"
+ [(set (match_operand:XF 0 "push_operand" "=<,<,<,<")
+ (match_operand:XF 1 "general_no_elim_operand" "f,r,*r,oF"))]
+@@ -3172,9 +3202,9 @@
;; in alternatives 4, 6, 7 and 8.
(define_insn "*movxf_internal"
[(set (match_operand:XF 0 "nonimmediate_operand"
@@ -51485,7 +52350,7 @@ Index: gcc/config/i386/i386.md
"!(MEM_P (operands[0]) && MEM_P (operands[1]))
&& (lra_in_progress || reload_completed
|| (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
-@@ -3201,19 +3201,19 @@
+@@ -3201,19 +3231,19 @@
}
}
[(set (attr "isa")
@@ -51509,7 +52374,7 @@ Index: gcc/config/i386/i386.md
(if_then_else (match_test "TARGET_64BIT")
(const_string "DI")
(const_string "SI"))
-@@ -3224,7 +3224,7 @@
+@@ -3224,7 +3254,7 @@
(symbol_ref "false")]
(symbol_ref "true")))
(set (attr "enabled")
@@ -53781,6 +54646,24 @@ Index: gcc/config/rs6000/rs6000-c.c
{ ALTIVEC_BUILTIN_VEC_VPKSHSS, ALTIVEC_BUILTIN_VPKSHSS,
RS6000_BTI_V16QI, RS6000_BTI_V8HI, RS6000_BTI_V8HI, 0 },
{ ALTIVEC_BUILTIN_VEC_VPKUHUS, ALTIVEC_BUILTIN_VPKUHUS,
+@@ -2411,7 +2411,7 @@
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, 0 },
+ { ALTIVEC_BUILTIN_VEC_SRA, P8V_BUILTIN_VSRAD,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+- { ALTIVEC_BUILTIN_VEC_SRA, P8V_BUILTIN_VSRD,
++ { ALTIVEC_BUILTIN_VEC_SRA, P8V_BUILTIN_VSRAD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+ { ALTIVEC_BUILTIN_VEC_VSRAW, ALTIVEC_BUILTIN_VSRAW,
+ RS6000_BTI_V4SI, RS6000_BTI_V4SI, RS6000_BTI_unsigned_V4SI, 0 },
+@@ -4512,7 +4512,7 @@
+
+ { P8V_BUILTIN_VEC_VSRAD, P8V_BUILTIN_VSRAD,
+ RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+- { P8V_BUILTIN_VEC_VSRAD, P8V_BUILTIN_VSRD,
++ { P8V_BUILTIN_VEC_VSRAD, P8V_BUILTIN_VSRAD,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+
+ { P8V_BUILTIN_VEC_VSUBCUQ, P8V_BUILTIN_VSUBCUQ,
@@ -4550,11 +4550,6 @@
{ P8V_BUILTIN_VEC_VUPKLSW, P8V_BUILTIN_VUPKLSW,
RS6000_BTI_bool_V2DI, RS6000_BTI_bool_V4SI, 0, 0 },
@@ -53909,7 +54792,16 @@ Index: gcc/config/rs6000/rs6000.c
if (rs6000_isa_flags_explicit & OPTION_MASK_UPPER_REGS_DF)
error ("-mpower9-dform requires -mupper-regs-df");
rs6000_isa_flags &= ~OPTION_MASK_P9_DFORM_SCALAR;
-@@ -15412,13 +15435,13 @@
+@@ -14157,6 +14180,8 @@
+ }
+ else if (icode == CODE_FOR_vsx_xxpermdi_v2df
+ || icode == CODE_FOR_vsx_xxpermdi_v2di
++ || icode == CODE_FOR_vsx_xxpermdi_v2df_be
++ || icode == CODE_FOR_vsx_xxpermdi_v2di_be
+ || icode == CODE_FOR_vsx_xxsldwi_v16qi
+ || icode == CODE_FOR_vsx_xxsldwi_v8hi
+ || icode == CODE_FOR_vsx_xxsldwi_v4si
+@@ -15412,13 +15437,13 @@
else if ((fnmask & RS6000_BTM_P8_VECTOR) != 0)
error ("Builtin function %s requires the -mpower8-vector option", name);
else if ((fnmask & RS6000_BTM_P9_VECTOR) != 0)
@@ -53926,7 +54818,7 @@ Index: gcc/config/rs6000/rs6000.c
else if ((fnmask & (RS6000_BTM_HARD_FLOAT | RS6000_BTM_LDBL128))
== (RS6000_BTM_HARD_FLOAT | RS6000_BTM_LDBL128))
error ("Builtin function %s requires the -mhard-float and"
-@@ -17057,6 +17080,7 @@
+@@ -17057,6 +17082,7 @@
break;
/* unsigned args, signed return. */
@@ -53934,7 +54826,7 @@ Index: gcc/config/rs6000/rs6000.c
case VSX_BUILTIN_XVCVUXDDP_UNS:
case ALTIVEC_BUILTIN_UNSFLOAT_V4SI_V4SF:
h.uns_p[1] = 1;
-@@ -23084,9 +23108,7 @@
+@@ -23084,9 +23110,7 @@
rtx dest_di = (d_mode == DImode) ? dest : gen_lowpart (DImode, dest);
rtx shift_reg = dest_di;
@@ -53945,7 +54837,7 @@ Index: gcc/config/rs6000/rs6000.c
if (MEM_P (src))
{
-@@ -23098,17 +23120,20 @@
+@@ -23098,17 +23122,20 @@
else
{
@@ -53974,7 +54866,7 @@ Index: gcc/config/rs6000/rs6000.c
}
emit_insn (gen_lshrdi3 (dest_di, shift_reg, GEN_INT (63)));
-@@ -38564,6 +38589,7 @@
+@@ -38564,6 +38591,7 @@
case UNSPEC_VSX_CVSPDPN:
return 0;
case UNSPEC_VSPLT_DIRECT:
@@ -53982,7 +54874,7 @@ Index: gcc/config/rs6000/rs6000.c
*special = SH_SPLAT;
return 1;
case UNSPEC_REDUC_PLUS:
-@@ -38634,6 +38660,12 @@
+@@ -38634,6 +38662,12 @@
{
if (GET_CODE (body) == SET)
{
@@ -53995,7 +54887,7 @@ Index: gcc/config/rs6000/rs6000.c
*special = SH_NOSWAP_LD;
return 1;
}
-@@ -38645,6 +38677,12 @@
+@@ -38645,6 +38679,12 @@
{
if (GET_CODE (body) == SET && GET_CODE (SET_SRC (body)) != UNSPEC)
{
@@ -54038,6 +54930,45 @@ Index: gcc/config/rs6000/vsx.md
[(set_attr "type" "vecdouble")])
;; Convert from 32-bit to 64-bit types
+@@ -2276,6 +2276,38 @@
+ op1 = gen_lowpart (V2DImode, op1);
+ }
+ }
++ emit_insn (gen (target, op0, op1, perm0, perm1));
++ DONE;
++})
++
++;; Special version of xxpermdi that retains big-endian semantics.
++(define_expand "vsx_xxpermdi_<mode>_be"
++ [(match_operand:VSX_L 0 "vsx_register_operand" "")
++ (match_operand:VSX_L 1 "vsx_register_operand" "")
++ (match_operand:VSX_L 2 "vsx_register_operand" "")
++ (match_operand:QI 3 "u5bit_cint_operand" "")]
++ "VECTOR_MEM_VSX_P (<MODE>mode)"
++{
++ rtx target = operands[0];
++ rtx op0 = operands[1];
++ rtx op1 = operands[2];
++ int mask = INTVAL (operands[3]);
++ rtx perm0 = GEN_INT ((mask >> 1) & 1);
++ rtx perm1 = GEN_INT ((mask & 1) + 2);
++ rtx (*gen) (rtx, rtx, rtx, rtx, rtx);
++
++ if (<MODE>mode == V2DFmode)
++ gen = gen_vsx_xxpermdi2_v2df_1;
++ else
++ {
++ gen = gen_vsx_xxpermdi2_v2di_1;
++ if (<MODE>mode != V2DImode)
++ {
++ target = gen_lowpart (V2DImode, target);
++ op0 = gen_lowpart (V2DImode, op0);
++ op1 = gen_lowpart (V2DImode, op1);
++ }
++ }
+ /* In little endian mode, vsx_xxpermdi2_<mode>_1 will perform a
+ transformation we don't want; it is necessary for
+ rs6000_expand_vec_perm_const_1 but not for this use. So we
Index: gcc/config/rs6000/rs6000.h
===================================================================
--- a/src/gcc/config/rs6000/rs6000.h (.../tags/gcc_6_3_0_release)
@@ -54137,6 +55068,15 @@ Index: gcc/config/rs6000/rs6000.md
"@
fctiduz %0,%1
xscvdpuxds %x0,%x1"
+@@ -7720,7 +7727,7 @@
+ rtx gpr_lo_reg = gen_lowpart (DFmode, dest);
+
+ emit_insn (gen_p8_mfvsrd_3_<mode> (gpr_hi_reg, src));
+- emit_insn (gen_vsx_xxpermdi_<mode> (tmp, src, src, GEN_INT (3)));
++ emit_insn (gen_vsx_xxpermdi_<mode>_be (tmp, src, src, GEN_INT (3)));
+ emit_insn (gen_p8_mfvsrd_3_<mode> (gpr_lo_reg, tmp));
+ DONE;
+ }
Index: gcc/config/rs6000/altivec.h
===================================================================
--- a/src/gcc/config/rs6000/altivec.h (.../tags/gcc_6_3_0_release)
diff --git a/debian/rules.d/binary-java.mk b/debian/rules.d/binary-java.mk
index 728c095..cc77c5a 100644
--- a/debian/rules.d/binary-java.mk
+++ b/debian/rules.d/binary-java.mk
@@ -285,7 +285,7 @@ endif
ifeq ($(with_external_ecj1),yes)
dh_link -p$(p_gcj) \
- /$(PF)/lib/$(DEB_HOST_GNU_TYPE)/gcc/ecj1 /$(gcc_lexec_dir)/ecj1
+ /$(PF)/lib/$(DEB_HOST_MULTIARCH)/gcc/ecj1 /$(gcc_lexec_dir)/ecj1
endif
ifeq ($(unprefixed_names),yes)
ln -sf $(cmd_prefix)gcj$(pkg_ver) \
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/gcc-6.git
More information about the Reproducible-commits
mailing list