[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