]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[committed] Fix testsuite fallout on stormy16 after IOR->PLUS change
authorJeff Law <jlaw@ventanamicro.com>
Fri, 21 Jun 2024 21:58:12 +0000 (15:58 -0600)
committerJeff Law <jlaw@ventanamicro.com>
Fri, 21 Jun 2024 21:59:29 +0000 (15:59 -0600)
More minor fallout from the IOR->PLUS change a little while ago.  This time on
xstormy16.

The pattern to swap nibbles actually tries to handle all the cases of IOR, XOR
and PLUS.  But when we generate PLUS earlier in the pipeline, the
simplifications/canonicalizations are slightly different resulting in the
pattern not matching.

This patch adds an alternate pattern which matches what we get now.  Basically
it looks like QImode rotate by 4, zero extended to HI.

Run in my tester to verify the regression was fixed.  Pushing to the trunk.

gcc/
* config/stormy16/stormy16.md (swpn_zext): New pattern.

gcc/config/stormy16/stormy16.md

index 7f12679847bd62f681cca86b2e0ac49662482d2c..62318345cdce78ebe1917991bd2713501bbaacef 100644 (file)
   "swpn %0 | and %0,#255"
   [(set_attr "length" "6")])
 
+;; Alternate form when we use PLUS instead of IOR early in the
+;; expanders.
+(define_insn "*swpn_zext"
+  [(set (match_operand:HI 0 "register_operand" "=r")
+       (zero_extend:HI
+         (subreg:QI
+           (any_or_plus:HI
+             (ashift:HI (match_operand:HI 1 "register_operand" "0")
+                        (const_int 4))
+             (lshiftrt:HI (match_dup 1) (const_int 4))) 0)))]
+  ""
+  "swpn %0 | and %0,#255"
+  [(set_attr "length" "6")])
+
 (define_insn "*swpn_sext"
   [(set (match_operand:HI 0 "register_operand" "=r")
        (sign_extend:HI