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 <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 =

= 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.
E.g. emit-rtl.cc says
      /* Should not happen as first in the BB is always either NOTE or
         LABEL.  */

        Jakub

Reply via email to