From 37f3000a57d62b808188eb6a14a369f6a789e1ea Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Fri, 21 Jun 2024 15:58:12 -0600 Subject: [PATCH] [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. --- 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 7f12679847bd..62318345cdce 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 -- 2.47.2