diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 67e8333e3d6c9ba2af4ce7a2c9f39de537913e22..ec30909166ba58b471e9d2f60759eb23a1fc5b0c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2019-05-27  Richard Biener  <rguenther@suse.de>
+
+	PR middle-end/90610
+	* match.pd (vec_perm): Avoid clobbering op0 when not generating
+	a bit-insert.
+
 2019-05-26  Uroš Bizjak  <ubizjak@gmail.com>
 
 	* config/i386/i386.md (@leave_<mode>): New expander.
diff --git a/gcc/match.pd b/gcc/match.pd
index f9bc097c49122bf1b4bcf0b12b09840daf7b8fbc..e1fa75cf5a08418079165b5bda50419dd5374278 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -5453,8 +5453,8 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
 		   first vector we only can insert the first elt from
 		   the first vector.  */
 	        at = 0;
-		ins = fold_read_from_vector (cop0, 0);
-	        op0 = op1;
+		if ((ins = fold_read_from_vector (cop0, 0)))
+		  op0 = op1;
 	      }
 	    else
 	      {