On 12/20/23 20:50, juzhe.zh...@rivai.ai wrote:
+       (and:VI
+         (match_operand:VI 3 "register_operand"         "vr, vr, vr, vr")
+         (not:VI (match_operand:VI 4 "register_operand" "vr, vr, vr, vr")))

This order should be swapped like ARM SVE:

(define_expand "@cond_bic<mode>"
   [(set (match_operand:SVE_FULL_I 0 "register_operand")
   (unspec:SVE_FULL_I
     [(match_operand:<VPRED> 1 "register_operand")
      (and:SVE_FULL_I
        (not:SVE_FULL_I (match_operand:SVE_FULL_I 3 "register_operand"))
        (match_operand:SVE_FULL_I 2 "register_operand"))
      (match_operand:SVE_FULL_I 4 "aarch64_simd_reg_or_zero")]
     UNSPEC_SEL))]
"TARGET_SVE"
)

Correct.  This case is even noted in the internals manual ;-)

A machine that has an instruction that performs a bitwise logical-and of one
operand with the bitwise negation of the other should specify the pattern
for that instruction as

@smallexample
(define_insn ""
  [(set (match_operand:@var{m} 0 @dots{})
        (and:@var{m} (not:@var{m} (match_operand:@var{m} 1 @dots{}))
                     (match_operand:@var{m} 2 @dots{})))]
  "@dots{}"
  "@dots{}")
@end smallexample


Jeff

Reply via email to