On Mon, Aug 12, 2024 at 12:25 AM Jakub Jelinek <[email protected]> wrote:
>
> On Thu, Aug 08, 2024 at 06:53:10PM -0700, H.J. Lu wrote:
> > When we emit .p2align to align BB_HEAD, we must update BB_HEAD. Otherwise
> > ENDBR will be inserted as the wrong place.
> >
> > gcc/
> >
> > PR target/116174
> > * config/i386/i386.cc (ix86_align_loops): Update BB_HEAD when
> > aligning BB_HEAD
> >
> > gcc/testsuite/
> >
> > PR target/116174
> > * gcc.target/i386/pr116174.c: New test.
> >
> > Signed-off-by: H.J. Lu <[email protected]>
> > ---
> > gcc/config/i386/i386.cc | 7 +++++--
> > gcc/testsuite/gcc.target/i386/pr116174.c | 12 ++++++++++++
> > 2 files changed, 17 insertions(+), 2 deletions(-)
> > create mode 100644 gcc/testsuite/gcc.target/i386/pr116174.c
> >
> > diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc
> > index 77c441893b4..ec6cc5e3548 100644
> > --- a/gcc/config/i386/i386.cc
> > +++ b/gcc/config/i386/i386.cc
> > @@ -23528,8 +23528,11 @@ ix86_align_loops ()
> >
> > if (padding_p && detect_tight_loop_p)
> > {
> > - emit_insn_before (gen_max_skip_align (GEN_INT (ceil_log2
> > (size)),
> > - GEN_INT (0)), label);
> > + rtx_insn *align =
>
> = can't go at the end of line.
>
> > + emit_insn_before (gen_max_skip_align (GEN_INT (ceil_log2
> > (size)),
> > + GEN_INT (0)), label);
> > + if (BB_HEAD (bb) == label)
> > + BB_HEAD (bb) = align;
>
> This is wrong. As documented, BB_HEAD needs to be either a CODE_LABEL, or
> NOTE_INSN_BASIC_BLOCK.
ira.cc has
new_insn = emit_insn_before (PATTERN (def_insn), use_insn);
REG_NOTES (new_insn) = REG_NOTES (def_insn);
REG_NOTES (def_insn) = 0;
/* Rescan it to process the notes. */
df_insn_rescan (new_insn);
/* Make sure this insn is recognized before reload begins,
otherwise eliminate_regs_in_insn will die. */
INSN_CODE (new_insn) = INSN_CODE (def_insn);
delete_insn (def_insn);
XEXP (reg_equiv[regno].init_insns, 0) = new_insn;
REG_BASIC_BLOCK (regno) = use_bb->index;
REG_N_CALLS_CROSSED (regno) = 0;
if (use_insn == BB_HEAD (use_bb))
BB_HEAD (use_bb) = new_insn;
new_insn isn't CODE_LABEL nor NOTE_INSN_BASIC_BLOCK.
Should it be changed?
> E.g. emit-rtl.cc says
> /* Should not happen as first in the BB is always either NOTE or
> LABEL. */
>
> Jakub
>
--
H.J.