On 7/11/24 16:29, Stefan Schulze Frielinghaus wrote:

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.

Ok. Thanks!


Andreas


Reply via email to