On Mon, May 14, 2018 at 2:48 PM, Jakub Jelinek <ja...@redhat.com> wrote:
> Hi!
>
> The last peephole I've recently added is as the testcase shows fundamentally
> incompatible with non-commutative operations, because we need to swap the
> operands.
>
> The pattern right before this one already is:
> (define_peephole2
>   [(parallel [(set (match_operand:SWI 0 "register_operand")
>                    (match_operator:SWI 2 "plusminuslogic_operator"
>                      [(match_dup 0)
>                       (match_operand:SWI 1 "memory_operand")]))
>               (clobber (reg:CC FLAGS_REG))])
>    (set (match_dup 1) (match_dup 0))
>    (set (reg FLAGS_REG) (compare (match_dup 0) (const_int 0)))]
>   "(TARGET_READ_MODIFY_WRITE || optimize_insn_for_size_p ())
>    && GET_CODE (operands[2]) != MINUS
> ^^^^^^^^ disallow non-commutative plusminuslogic_operator
>    && peep2_reg_dead_p (3, operands[0])
>    && !reg_overlap_mentioned_p (operands[0], operands[1])
>    && ix86_match_ccmode (peep2_next_insn (2),
>                          GET_CODE (operands[2]) == PLUS
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no need to check for MINUS here
>                          ? CCGOCmode : CCNOmode)"
>   [(parallel [(set (match_dup 3) (match_dup 5))
>               (set (match_dup 1) (match_dup 4))])]
> {
>   operands[3] = SET_DEST (PATTERN (peep2_next_insn (2)));
>   operands[4]
>     = gen_rtx_fmt_ee (GET_CODE (operands[2]), GET_MODE (operands[2]),
>                       copy_rtx (operands[1]),
>                       operands[0]);
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ and here is where it swaps the operands,
> ^^^^^^^^^^^^^^ the memory originally in the last input is here as the first 
> input
>   operands[5]
>     = gen_rtx_COMPARE (GET_MODE (operands[3]),
>                        copy_rtx (operands[4]),
>                        const0_rtx);
> })
>
> The following patch handles the cmpelim peephole the same.  Ok for trunk?
>
> Unfortunately, I'm travelling and can't test it right now, Marek, do you
> think you could bootstrap/regtest it for me?  Thanks.

I'll take care of this.

Uros.

Reply via email to