diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5dd558ae8a3a0b514203987f339a931a53726ca0..3348424ba4c0fca3a0c52e297862d488abd4bcb8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2020-05-20  Uroš Bizjak  <ubizjak@gmail.com>
+
+	PR target/95238
+	* config/i386/i386.md (*pushsi2_rex64):
+	Use "e" constraint instead of "i".
+
 2020-05-20  Jan Hubicka  <hubicka@ucw.cz>
 
 	* lto-streamer-in.c (lto_input_scc): Add SHARED_SCC parameter.
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index aa4f25b7065cc2f3f04f48c71c82b52030732e73..29c2b4795f0c6653e6b081c56fd006833370cc80 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -1750,7 +1750,7 @@
 ;; For TARGET_64BIT we always round up to 8 bytes.
 (define_insn "*pushsi2_rex64"
   [(set (match_operand:SI 0 "push_operand" "=X,X")
-	(match_operand:SI 1 "nonmemory_no_elim_operand" "ri,*v"))]
+	(match_operand:SI 1 "nonmemory_no_elim_operand" "re,*v"))]
   "TARGET_64BIT"
   "@
    push{q}\t%q1