https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87984
--- Comment #29 from Jakub Jelinek <jakub at gcc dot gnu.org> --- (In reply to Richard Biener from comment #28) > Any comments? > --- gcc/gimple.c (revision 270012) > +++ gcc/gimple.c (working copy) > @@ -2727,11 +2738,16 @@ gimple_asm_clobbers_memory_p (const gasm > { > unsigned i; > > + /* While strictly speaking only a "memory" clobber denotes clobbering > + memory in GIMPLE we also treat local hard-register variables as > + memory so simply treat all clobbers as memory. The only exception > + is the special clobber "cc". */ > for (i = 0; i < gimple_asm_nclobbers (stmt); i++) > { > tree op = gimple_asm_clobber_op (stmt, i); > - if (strcmp (TREE_STRING_POINTER (TREE_VALUE (op)), "memory") == 0) > - return true; > + if (strcmp (TREE_STRING_POINTER (TREE_VALUE (op)), "cc") == 0) > + continue; > + return true; > } > > /* Non-empty basic ASM implicitly clobbers memory. */ This will affect not just tree-ssa-operands.c, where it is ok I guess, as it will just mean a vdef and the alias oracle then can figure out if something aliases or not, but also ipa-pure-const.c and sanopt. Do we want to say that functions with register clobbers are no longer pure/const and for sanopt consider them to be potential spots to free memory?