On Wed, Aug 27, 2025 at 11:59 AM H.J. Lu <[email protected]> wrote:
>
> On Tue, Aug 26, 2025 at 8:50 PM Hongtao Liu <[email protected]> wrote:
> >
> > On Wed, Aug 27, 2025 at 6:30 AM H.J. Lu <[email protected]> wrote:
> > >
> > > For a basic block with only a debug marker:
> > >
> > > (note 3 0 2 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
> > > (note 2 3 5 2 NOTE_INSN_FUNCTION_BEG)
> > > (debug_insn 5 2 16 2 (debug_marker) "x.c":6:3 -1 (nil))
> > >
> > > emit the TLS call after debug marker.
> > >
> > > gcc/
> > >
> > >         PR target/121668
> > >         * config/i386/i386-features.cc (ix86_emit_tls_call): Emit the
> > >         TLS call after debug marker.
> > >
> > > gcc/testsuite/
> > >
> > >         PR target/121668
> > >         * gcc.target/i386/pr121668-1a.c: New test.
> > >
> > > Signed-off-by: H.J. Lu <[email protected]>
> > > ---
> > >  gcc/config/i386/i386-features.cc            | 26 +++++++++++++++++----
> > >  gcc/testsuite/gcc.target/i386/pr121668-1a.c | 13 +++++++++++
> > >  2 files changed, 34 insertions(+), 5 deletions(-)
> > >  create mode 100644 gcc/testsuite/gcc.target/i386/pr121668-1a.c
> > >
> > > diff --git a/gcc/config/i386/i386-features.cc 
> > > b/gcc/config/i386/i386-features.cc
> > > index cdb2a0b34b2..93e20947edf 100644
> > > --- a/gcc/config/i386/i386-features.cc
> > > +++ b/gcc/config/i386/i386-features.cc
> > > @@ -3806,10 +3806,19 @@ ix86_emit_tls_call (rtx tls_set, x86_cse_kind 
> > > kind, basic_block bb,
> > >                  (code_label 78 11 77 3 14 (nil) [1 uses])
> > >                  (note 77 78 54 3 [bb 3] NOTE_INSN_BASIC_BLOCK)
> > >
> > > +                or a basic block with only a debug marker:
> > > +
> > > +                (note 3 0 2 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
> > > +                (note 2 3 5 2 NOTE_INSN_FUNCTION_BEG)
> > > +                (debug_insn 5 2 16 2 (debug_marker) "x.c":6:3 -1 (nil))
> > > +
> > >                */
> > > -             gcc_assert (NOTE_P (insn)
> > > -                         && (NOTE_KIND (insn) == NOTE_INSN_FUNCTION_BEG
> > > -                             || NOTE_KIND (insn) == 
> > > NOTE_INSN_BASIC_BLOCK));
> > > +             gcc_assert (DEBUG_INSN_P (insn)
> > > +                         || (NOTE_P (insn)
> > > +                             && ((NOTE_KIND (insn)
> > > +                                  == NOTE_INSN_FUNCTION_BEG)
> > > +                                 || (NOTE_KIND (insn)
> > > +                                     == NOTE_INSN_BASIC_BLOCK))));
> >
> > Maybe we should just gcc_assert (!NONDEBUG_INSN_P (insn))?
>
> The loop is
>
>      while (insn && !NONDEBUG_INSN_P (insn))
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
> gcc_assert (!NONDEBUG_INSN_P (insn)) isn't needed inside the loop.
I c, the patch LGTM.
>
>         {
>           if (insn == BB_END (bb))
>             {
>               /* This must be the beginning basic block:
>
>                  (note 4 0 2 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
>                  (note 2 4 26 2 NOTE_INSN_FUNCTION_BEG)
>
>                  or a basic block with only a label:
>
>                  (code_label 78 11 77 3 14 (nil) [1 uses])
>                  (note 77 78 54 3 [bb 3] NOTE_INSN_BASIC_BLOCK)
>
>                */
>               gcc_assert (NOTE_P (insn)
>                           && (NOTE_KIND (insn) == NOTE_INSN_FUNCTION_BEG
>                               || NOTE_KIND (insn) == NOTE_INSN_BASIC_BLOCK));
>               insn = NULL;
>               break;
>             }
>           insn = NEXT_INSN (insn);
>         }
>
> >
> > >               insn = NULL;
> > >               break;
> > >             }
> > > @@ -3854,12 +3863,19 @@ ix86_emit_tls_call (rtx tls_set, x86_cse_kind 
> > > kind, basic_block bb,
> > >                  (note 4 0 2 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
> > >                  (note 2 4 26 2 NOTE_INSN_FUNCTION_BEG)
> > >
> > > -                or after NOTE_INSN_BASIC_BLOCK a basic block with only
> > > -                a label:
> > > +                or after NOTE_INSN_BASIC_BLOCK in a basic block with
> > > +                only a label:
> > >
> > >                  (code_label 78 11 77 3 14 (nil) [1 uses])
> > >                  (note 77 78 54 3 [bb 3] NOTE_INSN_BASIC_BLOCK)
> > >
> > > +                or after debug marker in a basic block with only a
> > > +                debug marker:
> > > +
> > > +                (note 3 0 2 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
> > > +                (note 2 3 5 2 NOTE_INSN_FUNCTION_BEG)
> > > +                (debug_insn 5 2 16 2 (debug_marker) "x.c":6:3 -1 (nil))
> > > +
> > >                */
> > >               insn = insn ? PREV_INSN (insn) : BB_END (bb);
> > >               *after_p = insn;
> > > diff --git a/gcc/testsuite/gcc.target/i386/pr121668-1a.c 
> > > b/gcc/testsuite/gcc.target/i386/pr121668-1a.c
> > > new file mode 100644
> > > index 00000000000..eb553081eb3
> > > --- /dev/null
> > > +++ b/gcc/testsuite/gcc.target/i386/pr121668-1a.c
> > > @@ -0,0 +1,13 @@
> > > +/* { dg-do compile { target *-*-linux* } } */
> > > +/* { dg-options "-Og -g -fpic -fplt -mtls-dialect=gnu" } */
> > > +
> > > +typedef int caml_domain_state;
> > > +thread_local caml_domain_state caml_state;
> > > +void
> > > +caml_empty_mark_stack ()
> > > +{
> > > +  while (caml_state)
> > > +    caml_state = 0;
> > > +}
> > > +
> > > +/* { dg-final { scan-assembler-times "call\[ \t\]__tls_get_addr@PLT" 1 { 
> > > target { ! ia32 } } } } */
> > > --
> > > 2.51.0
> > >
> >
> >
> > --
> > BR,
> > Hongtao
>
>
>
> --
> H.J.



-- 
BR,
Hongtao

Reply via email to