diff --git a/SOURCES/gcc8-pr91601.patch b/SOURCES/gcc8-pr91601.patch
new file mode 100644
index 0000000..ec058b8
--- /dev/null
+++ b/SOURCES/gcc8-pr91601.patch
@@ -0,0 +1,54 @@
+2020-03-29  Martin Liska  <mliska@suse.cz>
+
+	Backport from mainline
+	2019-09-02  Martin Liska  <mliska@suse.cz>
+
+	PR gcov-profile/91601
+	* gcov.c (path_contains_zero_cycle_arc): Rename to ...
+	(path_contains_zero_or_negative_cycle_arc): ... this and handle
+	also negative edges.
+	(circuit): Handle also negative edges as they can happen
+	in some situations.
+
+--- gcc/gcov.c
++++ gcc/gcov.c
+@@ -653,10 +653,10 @@ unblock (const block_info *u, block_vector_t &blocked,
+ /* Return true when PATH contains a zero cycle arc count.  */
+ 
+ static bool
+-path_contains_zero_cycle_arc (arc_vector_t &path)
++path_contains_zero_or_negative_cycle_arc (arc_vector_t &path)
+ {
+   for (unsigned i = 0; i < path.size (); i++)
+-    if (path[i]->cs_count == 0)
++    if (path[i]->cs_count <= 0)
+       return true;
+   return false;
+ }
+@@ -682,7 +682,7 @@ circuit (block_info *v, arc_vector_t &path, block_info *start,
+     {
+       block_info *w = arc->dst;
+       if (w < start
+-	  || arc->cs_count == 0
++	  || arc->cs_count <= 0
+ 	  || !linfo.has_block (w))
+ 	continue;
+ 
+@@ -693,7 +693,7 @@ circuit (block_info *v, arc_vector_t &path, block_info *start,
+ 	  handle_cycle (path, count);
+ 	  loop_found = true;
+ 	}
+-      else if (!path_contains_zero_cycle_arc (path)
++      else if (!path_contains_zero_or_negative_cycle_arc (path)
+ 	       &&  find (blocked.begin (), blocked.end (), w) == blocked.end ())
+ 	loop_found |= circuit (w, path, start, blocked, block_lists, linfo,
+ 			       count);
+@@ -708,7 +708,7 @@ circuit (block_info *v, arc_vector_t &path, block_info *start,
+       {
+ 	block_info *w = arc->dst;
+ 	if (w < start
+-	    || arc->cs_count == 0
++	    || arc->cs_count <= 0
+ 	    || !linfo.has_block (w))
+ 	  continue;
+ 
diff --git a/SOURCES/gcc8-pr92775.patch b/SOURCES/gcc8-pr92775.patch
new file mode 100644
index 0000000..2a0fa59
--- /dev/null
+++ b/SOURCES/gcc8-pr92775.patch
@@ -0,0 +1,115 @@
+2020-03-30  Jakub Jelinek  <jakub@redhat.com>
+
+	Backported from mainline
+	2019-12-06  Jakub Jelinek  <jakub@redhat.com>
+
+	PR fortran/92775
+	* trans.h (struct lang_type, struct lang_decl): Remove span member.
+	(GFC_DECL_SPAN, GFC_TYPE_ARRAY_SPAN): Remove macros.
+	* trans-array.h (gfc_get_descriptor_offsets_for_info): Add another
+	argument.
+	* trans-array.c (gfc_get_descriptor_offsets_for_info): Add SPAN_OFF
+	argument and initialize *SPAN_OFF to the offset of span field.
+	* trans-types.c (gfc_get_array_descr_info): Adjust
+	gfc_get_descriptor_offsets_for_info caller.  Compute elem_size
+	as base->span instead of TYPE_SIZE_UNIT (etype) constant.
+
+--- gcc/fortran/trans-array.c
++++ gcc/fortran/trans-array.c
+@@ -503,9 +503,10 @@ gfc_conv_shift_descriptor_lbound (stmtblock_t* block, tree desc,
+ 
+ void
+ gfc_get_descriptor_offsets_for_info (const_tree desc_type, tree *data_off,
+-				     tree *dtype_off, tree *dim_off,
+-				     tree *dim_size, tree *stride_suboff,
+-				     tree *lower_suboff, tree *upper_suboff)
++				     tree *dtype_off, tree *span_off,
++				     tree *dim_off, tree *dim_size,
++				     tree *stride_suboff, tree *lower_suboff,
++				     tree *upper_suboff)
+ {
+   tree field;
+   tree type;
+@@ -515,6 +516,8 @@ gfc_get_descriptor_offsets_for_info (const_tree desc_type, tree *data_off,
+   *data_off = byte_position (field);
+   field = gfc_advance_chain (TYPE_FIELDS (type), DTYPE_FIELD);
+   *dtype_off = byte_position (field);
++  field = gfc_advance_chain (TYPE_FIELDS (type), SPAN_FIELD);
++  *span_off = byte_position (field);
+   field = gfc_advance_chain (TYPE_FIELDS (type), DIMENSION_FIELD);
+   *dim_off = byte_position (field);
+   type = TREE_TYPE (TREE_TYPE (field));
+--- gcc/fortran/trans-array.h
++++ gcc/fortran/trans-array.h
+@@ -159,7 +159,7 @@ void gfc_trans_array_cobounds (tree, stmtblock_t *, const gfc_symbol *);
+ 
+ /* Build expressions for accessing components of an array descriptor.  */
+ void gfc_get_descriptor_offsets_for_info (const_tree, tree *, tree *, tree *, tree *,
+-					  tree *, tree *, tree *);
++					  tree *, tree *, tree *, tree *);
+ 
+ tree gfc_conv_descriptor_data_get (tree);
+ tree gfc_conv_descriptor_data_addr (tree);
+--- gcc/fortran/trans-types.c
++++ gcc/fortran/trans-types.c
+@@ -3344,7 +3344,7 @@ gfc_get_array_descr_info (const_tree type, struct array_descr_info *info)
+   int rank, dim;
+   bool indirect = false;
+   tree etype, ptype, t, base_decl;
+-  tree data_off, dim_off, dtype_off, dim_size, elem_size;
++  tree data_off, span_off, dim_off, dtype_off, dim_size, elem_size;
+   tree lower_suboff, upper_suboff, stride_suboff;
+   tree dtype, field, rank_off;
+ 
+@@ -3401,12 +3401,13 @@ gfc_get_array_descr_info (const_tree type, struct array_descr_info *info)
+   if (indirect)
+     base_decl = build1 (INDIRECT_REF, ptype, base_decl);
+ 
+-  elem_size = fold_convert (gfc_array_index_type, TYPE_SIZE_UNIT (etype));
+-
+-  gfc_get_descriptor_offsets_for_info (type, &data_off, &dtype_off, &dim_off,
+-				       &dim_size, &stride_suboff,
++  gfc_get_descriptor_offsets_for_info (type, &data_off, &dtype_off, &span_off,
++				       &dim_off, &dim_size, &stride_suboff,
+ 				       &lower_suboff, &upper_suboff);
+ 
++  t = fold_build_pointer_plus (base_decl, span_off);
++  elem_size = build1 (INDIRECT_REF, gfc_array_index_type, t);
++
+   t = base_decl;
+   if (!integer_zerop (data_off))
+     t = fold_build_pointer_plus (t, data_off);
+--- gcc/fortran/trans.h
++++ gcc/fortran/trans.h
+@@ -953,7 +953,6 @@ struct GTY(())	lang_type	 {
+   tree offset;
+   tree dtype;
+   tree dataptr_type;
+-  tree span;
+   tree base_decl[2];
+   tree nonrestricted_type;
+   tree caf_token;
+@@ -969,7 +968,6 @@ struct GTY(()) lang_decl {
+      address of target label.  */
+   tree stringlen;
+   tree addr;
+-  tree span;
+   /* For assumed-shape coarrays.  */
+   tree token, caf_offset;
+   unsigned int scalar_allocatable : 1;
+@@ -979,7 +977,6 @@ struct GTY(()) lang_decl {
+ 
+ #define GFC_DECL_ASSIGN_ADDR(node) DECL_LANG_SPECIFIC(node)->addr
+ #define GFC_DECL_STRING_LEN(node) DECL_LANG_SPECIFIC(node)->stringlen
+-#define GFC_DECL_SPAN(node) DECL_LANG_SPECIFIC(node)->span
+ #define GFC_DECL_TOKEN(node) DECL_LANG_SPECIFIC(node)->token
+ #define GFC_DECL_CAF_OFFSET(node) DECL_LANG_SPECIFIC(node)->caf_offset
+ #define GFC_DECL_SAVED_DESCRIPTOR(node) \
+@@ -1028,7 +1025,6 @@ struct GTY(()) lang_decl {
+ #define GFC_TYPE_ARRAY_DTYPE(node) (TYPE_LANG_SPECIFIC(node)->dtype)
+ #define GFC_TYPE_ARRAY_DATAPTR_TYPE(node) \
+   (TYPE_LANG_SPECIFIC(node)->dataptr_type)
+-#define GFC_TYPE_ARRAY_SPAN(node) (TYPE_LANG_SPECIFIC(node)->span)
+ #define GFC_TYPE_ARRAY_BASE_DECL(node, internal) \
+   (TYPE_LANG_SPECIFIC(node)->base_decl[(internal)])
+ 
diff --git a/SOURCES/gcc8-pr92950.patch b/SOURCES/gcc8-pr92950.patch
new file mode 100644
index 0000000..9116f3d
--- /dev/null
+++ b/SOURCES/gcc8-pr92950.patch
@@ -0,0 +1,72 @@
+Fix PR92950: Wrong code emitted for movv1qi
+    
+The backend emits 16 bit memory loads for single element character
+vector.  As a result the character will not be right justified in the
+GPR.
+    
+2019-12-17  Andreas Krebbel  <krebbel@linux.ibm.com>
+
+	Backport from mainline
+	2019-12-16  Andreas Krebbel  <krebbel@linux.ibm.com>
+
+	PR target/92950
+	* config/s390/vector.md ("mov<mode>" for V_8): Replace lh, lhy,
+	and lhrl with llc.
+
+--- gcc/config/s390/vector.md
++++ gcc/config/s390/vector.md
+@@ -289,9 +289,9 @@
+ ; However, this would probably be slower.
+ 
+ (define_insn "mov<mode>"
+-  [(set (match_operand:V_8 0 "nonimmediate_operand" "=v,v,d,v,R,  v,  v,  v,  v,d,  Q,  S,  Q,  S,  d,  d,d,d,d,R,T")
+-        (match_operand:V_8 1 "general_operand"      " v,d,v,R,v,j00,jm1,jyy,jxx,d,j00,j00,jm1,jm1,j00,jm1,R,T,b,d,d"))]
+-  ""
++  [(set (match_operand:V_8 0 "nonimmediate_operand" "=v,v,d,v,R,  v,  v,  v,  v,d,  Q,  S,  Q,  S,  d,  d,d,R,T")
++        (match_operand:V_8 1 "general_operand"      " v,d,v,R,v,j00,jm1,jyy,jxx,d,j00,j00,jm1,jm1,j00,jm1,T,d,d"))]
++  "TARGET_VX"
+   "@
+    vlr\t%v0,%v1
+    vlvgb\t%v0,%1,0
+@@ -309,12 +309,10 @@
+    mviy\t%0,-1
+    lhi\t%0,0
+    lhi\t%0,-1
+-   lh\t%0,%1
+-   lhy\t%0,%1
+-   lhrl\t%0,%1
++   llc\t%0,%1
+    stc\t%1,%0
+    stcy\t%1,%0"
+-  [(set_attr "op_type"      "VRR,VRS,VRS,VRX,VRX,VRI,VRI,VRI,VRI,RR,SI,SIY,SI,SIY,RI,RI,RX,RXY,RIL,RX,RXY")])
++  [(set_attr "op_type"      "VRR,VRS,VRS,VRX,VRX,VRI,VRI,VRI,VRI,RR,SI,SIY,SI,SIY,RI,RI,RXY,RX,RXY")])
+ 
+ (define_insn "mov<mode>"
+   [(set (match_operand:V_16 0 "nonimmediate_operand" "=v,v,d,v,R,  v,  v,  v,  v,d,  Q,  Q,  d,  d,d,d,d,R,T,b")
+--- /dev/null
++++ gcc/testsuite/gcc.target/s390/vector/pr92950.c
+@@ -0,0 +1,24 @@
++/* { dg-do run } */
++/* { dg-options "-O3 -mzarch -march=z13" } */
++
++struct a {
++  int b;
++  char c;
++};
++struct a d = {1, 16};
++struct a *e = &d;
++
++int f = 0;
++
++int main() {
++  struct a g = {0, 0 };
++  f = 0;
++
++  for (; f <= 1; f++) {
++    g = d;
++    *e = g;
++  }
++
++  if (d.c != 16)
++    __builtin_abort();
++}
diff --git a/SPECS/gcc.spec b/SPECS/gcc.spec
index 9ca32cb..3aaeb83 100644
--- a/SPECS/gcc.spec
+++ b/SPECS/gcc.spec
@@ -104,7 +104,7 @@
 Summary: Various compilers (C, C++, Objective-C, ...)
 Name: gcc
 Version: %{gcc_version}
-Release: %{gcc_release}%{?dist}.0.2
+Release: %{gcc_release}.1%{?dist}
 # libgcc, libgfortran, libgomp, libstdc++ and crtstuff have
 # GCC Runtime Exception.
 License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD
@@ -272,6 +272,9 @@ Patch15: gcc8-rh1670535.patch
 Patch17: gcc8-libgomp-20190503.patch
 Patch18: gcc8-pr86747.patch
 Patch19: gcc8-libgomp-testsuite.patch
+Patch20: gcc8-pr91601.patch
+Patch21: gcc8-pr92775.patch
+Patch22: gcc8-pr92950.patch
 
 Patch30: gcc8-rh1668903-1.patch
 Patch31: gcc8-rh1668903-2.patch
@@ -849,6 +852,9 @@ to NVidia PTX capable devices if available.
 %patch17 -p0 -b .libgomp-20190503~
 %patch18 -p0 -b .pr86747~
 %patch19 -p0 -b .libgomp-testsuite~
+%patch20 -p0 -b .pr91601~
+%patch21 -p0 -b .pr92775~
+%patch22 -p0 -b .pr92950~
 
 %patch30 -p0 -b .rh1668903-1~
 %patch31 -p0 -b .rh1668903-2~
@@ -3165,6 +3171,12 @@ fi
 %endif
 
 %changelog
+* Tue May 12 2020 Marek Polacek <polacek@redhat.com> 8.3.1-5.1
+- consider negative edges in cycle detection (#1817991, PR gcov-profile/91601)
+- fix Fortran debug info for arrays with descriptors (#1655624,
+  PR fortran/92775)
+- fix wrong code emitted for movv1qi on s390x (#1784758, PR target/92950)
+
 * Thu Nov 21 2019 Marek Polacek <polacek@redhat.com> 8.3.1-5
 - update from Fedora gcc-8.3.1-5 (#1747157)
 - use unspec_volatile for darn (PR target/91481, #1760205, CVE-2019-15847)