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

Reply via email to