On Mon, Aug 12, 2024 at 6:59 AM H.J. Lu <hjl.to...@gmail.com> wrote:
>
> On Thu, Aug 8, 2024 at 6:53 PM H.J. Lu <hjl.to...@gmail.com> 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 <hjl.to...@gmail.com>
> > ---
> >  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 =
> > +               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;
Are there any assumptions that BB_HEAD must be a note or label?
Maybe we should move ix86_align_loops into a separate pass and insert
the pass just before pass_final.

> >               /* End of function.  */
> >               if (!tbb || tbb == EXIT_BLOCK_PTR_FOR_FN (cfun))
> >                 break;
> > diff --git a/gcc/testsuite/gcc.target/i386/pr116174.c 
> > b/gcc/testsuite/gcc.target/i386/pr116174.c
> > new file mode 100644
> > index 00000000000..8877d0b51af
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/i386/pr116174.c
> > @@ -0,0 +1,12 @@
> > +/* { dg-do compile { target *-*-linux* } } */
> > +/* { dg-options "-O2 -fcf-protection=branch" } */
> > +
> > +char *
> > +foo (char *dest, const char *src)
> > +{
> > +  while ((*dest++ = *src++) != '\0')
> > +    /* nothing */;
> > +  return --dest;
> > +}
> > +
> > +/* { dg-final { scan-assembler "\t\.cfi_startproc\n\tendbr(32|64)\n" } } */
> > --
> > 2.45.2
> >
>
> PING.
>
> --
> H.J.



-- 
BR,
Hongtao

Reply via email to