On Thu, Apr 16, 2026 at 2:29 PM Uros Bizjak <[email protected]> wrote:
>
> On Thu, Apr 16, 2026 at 1:57 PM Richard Biener <[email protected]> wrote:
>
> > > I was interested to exercise opportunities, exposed by bbro pass (as
> > > mentioned in [1]), so the natural place to put the new pass is after
> > > bbro pass:
> > >
> > > On x86_32, IRA zeroes %ecx, which is later copied to %eax in the
> > > terminal basic block:
> > >
> > >    12: NOTE_INSN_BASIC_BLOCK 3
> > >     7: cx:SI=0
> > >       REG_EQUAL 0
> > >    45: pc=L36
> > >    ...
> > >    36: L36:
> > >    39: NOTE_INSN_BASIC_BLOCK 7
> > >    37: ax:SI=cx:SI
> > >    38: use ax:SI
> > >
> > > This sequence is reordered in bbro pass to:
> > >
> > >    28: L28:
> > >    12: NOTE_INSN_BASIC_BLOCK 7
> > >    69: {cx:SI=0;clobber flags:CC;}
> > >       REG_UNUSED flags:CC
> > >    71: ax:SI=cx:SI
> > >       REG_DEAD cx:SI
> > >    72: use ax:SI
> > >    73: NOTE_INSN_EPILOGUE_BEG
> > >    74: bx:SI=[sp:SI++]
> > >       REG_CFA_ADJUST_CFA sp:SI=sp:SI+0x4
> > >       REG_CFA_RESTORE bx:SI
> > >    75: si:SI=[sp:SI++]
> > >       REG_CFA_ADJUST_CFA sp:SI=sp:SI+0x4
> > >       REG_CFA_RESTORE si:SI
> > >    76: simple_return
> >
> > Ah, so maybe we can have a late combine entry that can be invoked
> > iff BB reorder does any path duplication only?  On GIMPLE we
> > increasingly invoke pass workers directly from other passes
> > in such case, VN even has a mode to operate on small portions
> > of the CFG.
>
> Please also note that with the i386 testcase, even before bbro pass
> there is in _.c.350r.rtl_dce:
>
>    25: L25:
>    18: NOTE_INSN_BASIC_BLOCK 5
>    19: cx:SI=ax:SI
>    20: flags:CCZ=cmp([ax:SI],si:SI)
>    21: pc={(flags:CCZ==0)?L36:pc}
>       REG_DEAD flags:CCZ
>       REG_BR_PROB 59055801
>    22: NOTE_INSN_BASIC_BLOCK 6
>    23: {dx:SI=dx:SI+0x1;clobber flags:CC;}
>       REG_UNUSED flags:CC
>    24: {ax:SI=ax:SI+0x4;clobber flags:CC;}
>       REG_UNUSED flags:CC
>    26: flags:CCZ=cmp(bx:SI,dx:SI)
>    27: pc={(flags:CCZ!=0)?L25:pc}
>       REG_DEAD flags:CCZ
>       REG_BR_PROB 1014686025
>    47: NOTE_INSN_BASIC_BLOCK 7
>    48: pc=L28
>    49: barrier
>    36: L36:
>    39: NOTE_INSN_BASIC_BLOCK 8
>    37: ax:SI=cx:SI
>       REG_DEAD cx:SI
>    38: use ax:SI
>
> (insn 19) and (insn 37) are also detected by pass_late_combine as
> redundant. So, the pass should run even if BB reorder doesn't
> duplicate paths to optimize some opportunities, exposed by previous
> passes.

Hm, no. When - fno-reorder-blocks -fno-reorder-blocks-and-partition
options are added to compile options, the newly added
pass_late_combine does nothing. So, there indeed are new opportunities
only when BB reorders blocks (duplicates paths?).

Uros.

Reply via email to