diff --git a/gcc/testsuite/gcc.target/i386/pr87984.c b/gcc/testsuite/gcc.target/i386/pr87984.c
new file mode 100644
index 0000000000000000000000000000000000000000..39a6a7480f9eb7117cb0a8029449d2e5bc77aa45
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr87984.c
@@ -0,0 +1,23 @@
+/* { dg-do run } */
+/* { dg-options "-O" } */
+
+__attribute__((noipa))
+int f(void)
+{
+  int o = 0;
+  for (int i = 0; i < 3; i++)
+    {
+      register int a asm("eax");
+      a = 1;
+      asm("add %1, %0" : "+r"(o) : "r"(a));
+      asm("xor %%eax, %%eax" ::: "eax");
+    }
+  return o;
+}
+
+int main()
+{
+  if (f() != 3)
+    __builtin_abort();
+  return 0;
+}
diff --git a/gcc/tree-ssa-dom.cc b/gcc/tree-ssa-dom.cc
index 291c3a4fa6b5068e2653e2d6011481e76047731c..b1ac35e12fd97b52e1720be7af7083b248461c76 100644
--- a/gcc/tree-ssa-dom.cc
+++ b/gcc/tree-ssa-dom.cc
@@ -2454,7 +2454,9 @@ dom_opt_dom_walker::optimize_stmt (basic_block bb, gimple_stmt_iterator *si,
 
       /* Perform simple redundant store elimination.  */
       if (gimple_assign_single_p (stmt)
-	  && TREE_CODE (gimple_assign_lhs (stmt)) != SSA_NAME)
+	  && TREE_CODE (gimple_assign_lhs (stmt)) != SSA_NAME
+	  && (TREE_CODE (gimple_assign_lhs (stmt)) != VAR_DECL
+	      || !DECL_HARD_REGISTER (gimple_assign_lhs (stmt))))
 	{
 	  tree lhs = gimple_assign_lhs (stmt);
 	  tree rhs = gimple_assign_rhs1 (stmt);
diff --git a/gcc/tree-ssa-sccvn.cc b/gcc/tree-ssa-sccvn.cc
index 146840664e2ea0a81f169c805dab63cd2be507bc..5a8c7c3aa10b991ff6298e9ba50b8b9ef97ec967 100644
--- a/gcc/tree-ssa-sccvn.cc
+++ b/gcc/tree-ssa-sccvn.cc
@@ -7081,6 +7081,8 @@ eliminate_dom_walker::eliminate_stmt (basic_block b, gimple_stmt_iterator *gsi)
   if (gimple_assign_single_p (stmt)
       && !gimple_has_volatile_ops (stmt)
       && !is_gimple_reg (gimple_assign_lhs (stmt))
+      && (TREE_CODE (gimple_assign_lhs (stmt)) != VAR_DECL
+	  || !DECL_HARD_REGISTER (gimple_assign_lhs (stmt)))
       && (TREE_CODE (gimple_assign_rhs1 (stmt)) == SSA_NAME
 	  || is_gimple_min_invariant (gimple_assign_rhs1 (stmt))))
     {