https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93934

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |uros at gcc dot gnu.org

--- Comment #10 from Richard Biener <rguenth at gcc dot gnu.org> ---
Btw, it seems to require -march=x86-64 to produce the fcmov.  It's RTL that
creates that so this might be an angle of attack for a fix.

We expand from

;;   basic block 9, loop depth 0
;;    pred:       8
  if (b_12(D) != 0)
    goto <bb 11>; [56.18%]
  else
    goto <bb 10>; [43.82%]
;;    succ:       11
;;                10

;;   basic block 10, loop depth 0
;;    pred:       9
;;                2
;;    succ:       11

;;   basic block 11, loop depth 0
;;    pred:       9
;;                10
  # iftmp.0_6 = PHI <result_3(9), 7.0e+0(10)>
  return iftmp.0_6;

and in split3 we seem to have jump threaded the exit in BB reorder
which should be fine but then we somehow if-converted the other check.

Disabling both CE1 and CE2 avoids that.  CE1 does

IF-THEN-JOIN block found, pass 1, test 5, then 7, join 9
scanning new insn with uid = 69.
scanning new insn with uid = 70.
if-conversion succeeded through noce_try_cmove
Removing jump 25.
deleting insn with uid = 25.
deleting insn with uid = 8.
deleting block 7
Conversion succeeded on pass 1.

IF-THEN-JOIN block found, pass 1, test 6, then 8, join 9

IF-CASE-2 found, start 6, else 8


maybe the backend should not advertise conditional moves with DF/SFmode and x87
math ...

Reply via email to