https://gcc.gnu.org/g:37f3000a57d62b808188eb6a14a369f6a789e1ea

commit r15-1554-g37f3000a57d62b808188eb6a14a369f6a789e1ea
Author: Jeff Law <j...@ventanamicro.com>
Date:   Fri Jun 21 15:58:12 2024 -0600

    [committed] Fix testsuite fallout on stormy16 after IOR->PLUS change
    
    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.

Diff:
---
 gcc/config/stormy16/stormy16.md | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/gcc/config/stormy16/stormy16.md b/gcc/config/stormy16/stormy16.md
index 7f12679847b..62318345cdc 100644
--- a/gcc/config/stormy16/stormy16.md
+++ b/gcc/config/stormy16/stormy16.md
@@ -1363,6 +1363,20 @@
   "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

Reply via email to