https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95218
Uroš Bizjak <ubizjak at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |law at gcc dot gnu.org, | |rsandifo at gcc dot gnu.org --- Comment #9 from Uroš Bizjak <ubizjak at gmail dot com> --- (In reply to Uroš Bizjak from comment #7) > Ooh, yes :( > > '(use X)' > Represents the use of the value of X. It indicates that the value > in X at this point in the program is needed, even though it may not > be apparent why this is so. Therefore, the compiler will not > attempt to delete previous instructions whose only effect is to > store a value in X. X must be a 'reg' expression. > > Partial revert is in works. Actually, no. The above applies to single (use ...) RTX, not (use ...) as part of a parallel. There are plenty of uses of memory_operands in i386.md: (define_insn "fix_truncdi_i387" [(set (match_operand:DI 0 "nonimmediate_operand" "=m") (fix:DI (match_operand 1 "register_operand" "f"))) (use (match_operand:HI 2 "memory_operand" "m")) (use (match_operand:HI 3 "memory_operand" "m")) (clobber (match_scratch:XF 4 "=&f"))] Let's ask experts.