On Thu, Dec 05, 2019 at 09:56:46AM +0800, Hongtao Liu wrote:
> --- a/gcc/config/i386/i386-expand.c
> +++ b/gcc/config/i386/i386-expand.c
> +      /* Using vector move with mask register.  */
> +      cmp = force_reg (cmpmode, cmp);
> +      /* Optimize for mask zero.  */
> +      op_true =
> +     op_true != CONST0_RTX (mode) ? force_reg (mode, op_true) : op_true;
> +      op_false =
> +     op_false != CONST0_RTX (mode) ? force_reg (mode, op_false) : op_false;

The above two still aren't correct, = doesn't belong at the end of line
either.

      op_true
        = op_true != CONST0_RTX (mode) ? force_reg (mode, op_true) : op_true;

would be ok,

      op_false
        = op_false != CONST0_RTX (mode) ? force_reg (mode, op_false) : op_false;

is too long, so e.g.

      op_false = (op_false != CONST0_RTX (mode)
                  ? force_reg (mode, op_false) : op_false);

> +       /* Reverse op_true op_false.  */
> +       n = op_true;
> +       op_true = op_false;
> +       op_false = n;

Please use
          std::swap (op_true, op_false);
instead of the above 3 lines.

Also, can you please add at least one testcase for this with -masm=intel,
effective target masm_intel and dg-do assemble to make sure it assembles?
Perhaps just one -mavx512vl -mavx512bw avx512vl/avx512bw effective target that 
tests all the patterns?

Ok with those changes.

        Jakub

Reply via email to