On Sun, Aug 11, 2024 at 6:52 PM Hongtao Liu <crazy...@gmail.com> wrote:
>
> 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?

I don't know.  But LABEL may be BB_HEAD.

> 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



-- 
H.J.

Reply via email to