On Fri, Dec 04, 2020 at 07:06:45PM +0100, Uros Bizjak wrote:
> No, I didn't want to burden you with the additional task - the patch
> is OK as it is. I was just thinking out loud, as I remembered that
> changing bt patterns to combine splitter regressed one testcase. IIRC
> combination of two insns blocked better combination of three insns, or
> something like that.

Here is the patch to simplify the newly added combine splitters,
when we split into 2 insns anyway, no reason to split into the masking
define_insn_and_split we'd be splitting shortly after.

Passes the new testcase, ok if it passes bootstrap/regtest on x86_64-linux
and i686-linux?

2020-12-04  Jakub Jelinek  <ja...@redhat.com>

        PR target/96226
        * config/i386/i386.md (splitter after *<rotate_insn><mode>3_mask,
        splitter after *<rotate_insn><mode>3_mask_1): Drop the masking from
        the patterns to split into.

--- gcc/config/i386/i386.md.jj  2020-12-04 18:44:23.494052861 +0100
+++ gcc/config/i386/i386.md     2020-12-04 19:00:22.192626807 +0100
@@ -11988,8 +11988,7 @@ (define_split
  [(set (match_dup 4) (match_dup 1))
   (set (match_dup 0)
        (any_rotate:SWI48 (match_dup 4)
-                        (subreg:QI
-                          (and:SI (match_dup 2) (match_dup 3)) 0)))]
+                        (subreg:QI (match_dup 2) 0)))]
  "operands[4] = gen_reg_rtx (<MODE>mode);")
 
 (define_insn_and_split "*<rotate_insn><mode>3_mask_1"
@@ -12023,8 +12022,7 @@ (define_split
   == GET_MODE_BITSIZE (<MODE>mode) - 1"
  [(set (match_dup 4) (match_dup 1))
   (set (match_dup 0)
-       (any_rotate:SWI48 (match_dup 4)
-                        (and:QI (match_dup 2) (match_dup 3))))]
+       (any_rotate:SWI48 (match_dup 4) (match_dup 2)))]
  "operands[4] = gen_reg_rtx (<MODE>mode);")
 
 ;; Implement rotation using two double-precision


        Jakub

Reply via email to