On Thu, Jul 11, 2024 at 04:29:19PM +0200, 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. > --- > Bootstrap and regtest or still running. Assuming no regressions, ok > for {mainline,11,12,13,14}? Would be great to see this in 14.2 RC :)
I didn't have the schedule for 11.5 RC in mind which is tomorrow and the release a week afterwards. I hope this is still appropriate for 11.5? Cheers, Stefan > > gcc/config/s390/s390.md | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md > index f5d7003dfad..d3931b09417 100644 > --- a/gcc/config/s390/s390.md > +++ b/gcc/config/s390/s390.md > @@ -9556,7 +9556,8 @@ > (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 "" ""))))] > "" > -- > 2.45.2 >