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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
     Ever confirmed|0                           |1
                 CC|                            |segher at gcc dot gnu.org
   Last reconfirmed|                            |2022-09-27
      Known to fail|                            |13.0
             Target|                            |x86_64-*-*
           Keywords|                            |missed-optimization
             Status|UNCONFIRMED                 |NEW

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed.  It's shrink-wrapping which is duplicating blocks and the load. 
Before we have

    1: NOTE_INSN_DELETED
    5: NOTE_INSN_BASIC_BLOCK 2
    2: ax:SI=di:SI
    4: NOTE_INSN_FUNCTION_BEG
    7: flags:CCZ=cmp(ax:SI,0)
    8: pc={(flags:CCZ==0)?L27:pc}
      REG_BR_PROB 536870916
    9: NOTE_INSN_BASIC_BLOCK 3
   10: ax:SI=[`f']
   11: flags:CCZ=cmp(ax:SI,0)
   12: pc={(flags:CCZ==0)?L24:pc}
      REG_BR_PROB 708669604
   13: NOTE_INSN_BASIC_BLOCK 4
   14: flags:CCZ=cmp(si:SI,0)
   15: pc={(flags:CCZ==0)?L19:pc}
      REG_BR_PROB 719407028
   16: NOTE_INSN_BASIC_BLOCK 5
   17: ax:QI=0
   18: call [`func_58'] argc:0
      REG_EH_REGION 0
   19: L19:
   20: NOTE_INSN_BASIC_BLOCK 6
   21: ax:SI=[`g_286']
   38: pc=L27
   39: barrier
   24: L24:
   25: NOTE_INSN_BASIC_BLOCK 7
   26: [`g_286']=0
   27: L27:
   28: NOTE_INSN_BASIC_BLOCK 8
   34: use ax:SI
   40: NOTE_INSN_DELETED

maybe shrink-wrapping should consider splitting blocks before doing the
transform?

Reply via email to