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