On Sun, Dec 19, 2021 at 12:06:30PM -0800, H.J. Lu via Gcc-patches wrote: > --- a/gcc/config/i386/predicates.md > +++ b/gcc/config/i386/predicates.md > @@ -1199,6 +1199,12 @@ > (and (match_operand 0 "memory_operand") > (not (match_test "x86_extended_reg_mentioned_p (op)")))) > > +;; Return true if OP is a memory operand representable on ix86. > +(define_predicate "ix86_memory_operand" > + (and (match_operand 0 "memory_operand") > + (ior (match_test "mode == QImode || mode == HImode") > + (match_operand 0 "x86_64_general_operand"))))
I must be missing something, but how can this work? x86_64_general_operand is: (define_predicate "x86_64_general_operand" (if_then_else (match_test "TARGET_64BIT") (ior (match_operand 0 "nonimmediate_operand") (match_operand 0 "x86_64_immediate_operand")) (match_operand 0 "general_operand"))) and so for non-immediates like MEMs it is just a normal memory_operand. Jakub