On Sun, Aug 11, 2024 at 6:52 PM Hongtao Liu <[email protected]> wrote:
>
> On Mon, Aug 12, 2024 at 6:59 AM H.J. Lu <[email protected]> wrote:
> >
> > On Thu, Aug 8, 2024 at 6:53 PM H.J. Lu <[email protected]> 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 =
> > > + 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.