+; False dependency happens on destination register which is not really
+; used when moving all ones to vector register
+(define_split
+ [(set (match_operand:VMOVE 0 "register_operand")
+ (match_operand:VMOVE 1 "int_float_vector_all_ones_operand"))]
+ "TARGET_AVX512F && reload_completed
+ && (<MODE_SIZE> == 64 || EXT_REX_SSE_REG_P (operands[0]))"
+ [(set (match_dup 0) (match_dup 2))
+ (parallel
+ [(set (match_dup 0) (match_dup 1))
+ (unspec [(match_dup 0)] UNSPEC_INSN_FALSE_DEP)])]
+ "operands[2] = CONST0_RTX (<MODE>mode);")
I think we shouldnt emit PXOR when optimizing for size. So should change
define_split:
define_split
[(set (match_operand:VMOVE 0 "register_operand")
(match_operand:VMOVE 1 "int_float_vector_all_ones_operand"))]
"TARGET_AVX512F && reload_completed
&& (<MODE_SIZE> == 64 || EXT_REX_SSE_REG_P (operands[0]))
&& optimize_insn_for_speed_p ()"
[(set (match_dup 0) (match_dup 2))
(parallel
[(set (match_dup 0) (match_dup 1))
(unspec [(match_dup 0)] UNSPEC_INSN_FALSE_DEP)])]
"operands[2] = CONST0_RTX (<MODE>mode);")