]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
s390: Align *cjump_64 and *icjump_64
authorStefan Schulze Frielinghaus <stefansf@gcc.gnu.org>
Tue, 16 Jul 2024 12:01:50 +0000 (14:01 +0200)
committerStefan Schulze Frielinghaus <stefansf@gcc.gnu.org>
Tue, 16 Jul 2024 12:01:50 +0000 (14:01 +0200)
During machine reorg we optimize backward jumps and transform insns as
e.g.

(jump_insn 118 117 119 (set (pc)
        (if_then_else (ne (reg:CCRAW 33 %cc)
                (const_int 8 [0x8]))
            (label_ref 134)
            (pc))) "dec_math_1.f90":204:8 discrim 1 2161 {*cjump_64}
     (expr_list:REG_DEAD (reg:CCRAW 33 %cc)
        (int_list:REG_BR_PROB 719407028 (nil)))
 -> 134)

into

(jump_insn 118 117 432 (set (pc)
        (if_then_else (ne (reg:CCRAW 33 %cc)
                (const_int 8 [0x8]))
            (pc)
            (label_ref 433))) "dec_math_1.f90":204:8 discrim 1 -1
     (expr_list:REG_DEAD (reg:CCRAW 33 %cc)
        (int_list:REG_BR_PROB 719407028 (nil)))
 -> 433)

The latter is not recognized anymore since *icjump_64 only matches
CC_REGNUM against zero.  Fixed by aligning *cjump_64 and *icjump_64.

gcc/ChangeLog:

* config/s390/s390.md (*icjump_64): Allow raw CC comparisons,
i.e., any constant integer between 0 and 15 for CC comparisons.

(cherry picked from commit 56de68aba6cb9cf3022d9e303eec6c6cdb49ad4d)

gcc/config/s390/s390.md

index aaa247d7612f59c71f07163fa16cdbdc9080039e..5b174e0d866ffc8386916960928316f2127122dd 100644 (file)
 (define_insn "*icjump_64"
   [(set (pc)
         (if_then_else
-          (match_operator 1 "s390_comparison" [(reg CC_REGNUM) (const_int 0)])
+          (match_operator 1 "s390_comparison" [(reg CC_REGNUM)
+                                              (match_operand 2 "const_int_operand" "")])
           (pc)
           (label_ref (match_operand 0 "" ""))))]
   ""