On Thu, Jul 6, 2023 at 11:46 PM <simonaytes....@ispras.ru> wrote: > > > +; 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);") Yes, will do. I'm still working on breaking the false depence for pternlog in newly added pattern *iornot<mode>3,*xnor<mode>3 and *<nlogic><mode>3. Will repost the patch when it's done.
-- BR, Hongtao