Hello!

Recent committed patch breaks i386ssefp-2.c testcase, where maxsd is
not generated anymore.

I have looked a bit into this failure and noticed that for some reason
we don't perform ifcvt transformations during ce1 RTL pass. The second
transformation is still performed during ce2 pass, but this is late as
combine already combined some patterns into patterns that can't be
split into maxsd pattern.

Previously, ce1 pass generated:

IF-THEN block found, pass 1, start block 2 [insn 5], then 3 [15], join 4 [17]
Replacing insn 10 by jump 35
Conversion succeeded on pass 1.

1 possible IF blocks searched.
1 IF blocks converted.
2 true changes made.

(insn 34 9 19 2 (set (reg:DF 58 [ iftmp.0 ])
       (unspec:DF [
               (reg:DF 60)
               (reg:DF 58 [ iftmp.0 ])
           ] 52)) 564 {*ieee_smaxdf3} (nil)
   (nil))

but now all relevant insns remain unaffected at the end of ce1 pass:

(insn 9 8 10 2 (set (reg:CCFPU 17 flags)
       (compare:CCFPU (reg:DF 60)
           (reg:DF 58 [ iftmp.0 ]))) 26 {*cmpfp_iu_sse} (nil)
   (nil))

(jump_insn 10 9 14 2 (set (pc)
       (if_then_else (gt (reg:CCFPU 17 flags)
               (const_int 0 [0x0]))
           (label_ref:SI 14)
           (pc))) 365 {*jcc_1} (nil)
   (expr_list:REG_BR_PROB (const_int 4600 [0x11f8])
       (nil)))

Uros.

Reply via email to