--- gcc/ipa-pure-const.c	(revision 166773)
+++ gcc/ipa-pure-const.c	(revision 166774)
@@ -360,7 +360,7 @@ get_asm_expr_operands (funct_state local
   for (i = 0; i < gimple_asm_nclobbers (stmt); i++)
     {
       op = gimple_asm_clobber_op (stmt, i);
-      if (simple_cst_equal(TREE_VALUE (op), memory_identifier_string) == 1) 
+      if (strcmp (TREE_STRING_POINTER (TREE_VALUE (op)), "memory") == 0)
 	/* Abandon all hope, ye who enter here. */
 	local->pure_const_state = IPA_NEITHER;
     }
--- gcc/testsuite/gcc.target/i386/pr46491.c	(revision 0)
+++ gcc/testsuite/gcc.target/i386/pr46491.c	(revision 166774)
@@ -0,0 +1,22 @@
+/* PR tree-optimization/46491 */
+/* { dg-do run } */
+/* { dg-options "-O2 -fno-ipa-reference" } */
+
+extern void abort (void);
+
+__attribute__((noinline)) int
+foo (int *p)
+{
+  int r;
+  asm ("movl $6, (%1)\n\txorl %0, %0" : "=r" (r) : "r" (p) : "memory");
+  return r;
+}
+
+int
+main (void)
+{
+  int p = 8;
+  if ((foo (&p) ? : p) != 6)
+    abort ();
+  return 0;
+}
