On Tue, Dec 01, 2020 at 12:49:03PM +0800, Hongtao Liu via Gcc-patches wrote:
> +    bool neq_p = INTVAL (operands[4]) >> 2;
> +    /* LE: 2, NLT: 5, NLE: 6, LT: 1  */
> +    rtx cmp_predicate = neq_p ? GEN_INT (6) : GEN_INT (2);
> +    if (MEM_P (operands[1]))
> +      {
> +     std::swap (operands[1], operands[2]);
> +     cmp_predicate = neq_p ? GEN_INT (1) : GEN_INT (5);
> +      }
> +    emit_insn (gen_<avx512>_ucmp<mode>3 (operands[0], operands[1],
> +                                     operands[2], cmp_predicate));

I'd suggest instead:
+    /* LE: 2, NLT: 5, NLE: 6, LT: 1  */
+    int cmp_predicate = 2; /* LE  */
+    if (MEM_P (operands[1]))
+      {
+       std::swap (operands[1], operands[2]);
+       cmp_predicate = 5; /* NLT (GE)  */
+      }
+    if ((INTVAL (operands[4]) & 4) != 0)
+      cmp_predictate ^= 4; /* Invert the comparison to NLE (GT) or LT.  */
+    emit_insn (gen_<avx512>_ucmp<mode>3 (operands[0], operands[1], operands[2],
+                                        GEN_INT (cmp_predicate)));
so that you don't create the rtx CONST_INTs in 4 places and don't do that
unnecessarily when you will need another constant.

Otherwise LGTM, thanks.

        Jakub

Reply via email to