Hi All, The RTL Generated from <sup>dot_prod<vsi2qi> is invalid as operand3 cannot be written to, it's a normal input. For the expand it's just another operand but the caller does not expect it to be written to.
Bootstrapped Regtested on arm-none-linux-gnueabihf and no issues. Ok for master? and backport to GCC 11, 10, 9? Thanks, Tamar gcc/ChangeLog: * config/arm/neon.md (<sup>dot_prod<vsi2qi>): Drop statements. --- inline copy of patch -- diff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md index 61d81646475ce3bf62ece2cec2faf0c1fe978ec1..9602e9993aeebf4ec620d105fd20f64498a3b851 100644 --- a/gcc/config/arm/neon.md +++ b/gcc/config/arm/neon.md @@ -3067,13 +3067,7 @@ (define_expand "<sup>dot_prod<vsi2qi>" DOTPROD) (match_operand:VCVTI 3 "register_operand")))] "TARGET_DOTPROD" -{ - emit_insn ( - gen_neon_<sup>dot<vsi2qi> (operands[3], operands[3], operands[1], - operands[2])); - emit_insn (gen_rtx_SET (operands[0], operands[3])); - DONE; -}) +) ;; Auto-vectorizer pattern for usdot (define_expand "usdot_prod<vsi2qi>" --
diff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md index 61d81646475ce3bf62ece2cec2faf0c1fe978ec1..9602e9993aeebf4ec620d105fd20f64498a3b851 100644 --- a/gcc/config/arm/neon.md +++ b/gcc/config/arm/neon.md @@ -3067,13 +3067,7 @@ (define_expand "<sup>dot_prod<vsi2qi>" DOTPROD) (match_operand:VCVTI 3 "register_operand")))] "TARGET_DOTPROD" -{ - emit_insn ( - gen_neon_<sup>dot<vsi2qi> (operands[3], operands[3], operands[1], - operands[2])); - emit_insn (gen_rtx_SET (operands[0], operands[3])); - DONE; -}) +) ;; Auto-vectorizer pattern for usdot (define_expand "usdot_prod<vsi2qi>"