public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: "H.J. Lu" <hjl.tools@gmail.com>
To: Uros Bizjak <ubizjak@gmail.com>
Cc: "gcc-patches@gcc.gnu.org" <gcc-patches@gcc.gnu.org>
Subject: Re: [PATCH] x86-64: Use R10 for profiling large model
Date: Fri, 8 Jan 2021 04:50:49 -0800	[thread overview]
Message-ID: <CAMe9rOpBTjxr-X3-5kjghTcJycXthojK8V7mQ+tzf5m-Z0Lj3g@mail.gmail.com> (raw)
In-Reply-To: <CAFULd4bxHVn65TggdMjwHBb8pMM-9Q8_1=OCR_xjtLqsYJjwbw@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 1098 bytes --]

On Fri, Jan 8, 2021 at 1:24 AM Uros Bizjak <ubizjak@gmail.com> wrote:
>
> > Since R10 is preserved when calling mcount, R10 can be used a scratch
> > register to call mcount in large model.
>
> Please mention that R10 can be used as a static chain registers and is
> preserved when calling mcount for nested functions.
>
> > gcc/
> >
> > PR target/98482
> > * config/i386/i386.c (x86_function_profiler): Use R10 to call
> > mcount in large model. Sorry for large model with PIC.
> >
> > gcc/testsuite/
> >
> > PR target/98482
> > * gcc.target/i386/pr98482-1.c: New test.
> > * gcc.target/i386/pr98482-1.c: Likewise.
>
> OK with comment fixes.
>
> Thanks,
> Uros.
>
> +    case CM_LARGE:
> +      /* NB: R10 can be used as a scratch register here since
> +        R10 is preserved when calling mcount.  */
>
> Also mention that R10 can be used as a static chain register and is
> preserved when calling mcount for nested functions.
>
> +      fprintf (file, "1:\tmovabsq\t$%s, %%r10\n\tcall\t*%%r10\n",
> +       mcount_name);
> +      break;

This is the patch I am checking in.

Thanks.

-- 
H.J.

[-- Attachment #2: 0001-x86-64-Use-R10-for-profiling-large-model.patch --]
[-- Type: text/x-patch, Size: 3341 bytes --]

From 6ddaec60b84ccdfb11224440bfffa86112244d88 Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Thu, 7 Jan 2021 14:27:49 -0800
Subject: [PATCH] x86-64: Use R10 for profiling large model

R10 is caller-saved.  Although it can be used as a static chain register,
it is preserved when calling mcount for nested functions.  Use R10 as a
scratch register to call mcount in large model.

gcc/

	PR target/98482
	* config/i386/i386.c (x86_function_profiler): Use R10 to call
	mcount in large model.  Sorry for large model with PIC.

gcc/testsuite/

	PR target/98482
	* gcc.target/i386/pr98482-1.c: New test.
	* gcc.target/i386/pr98482-1.c: Likewise.
---
 gcc/config/i386/i386.c                    | 26 +++++++++++++++++++++--
 gcc/testsuite/gcc.target/i386/pr98482-1.c |  9 ++++++++
 gcc/testsuite/gcc.target/i386/pr98482-2.c |  9 ++++++++
 3 files changed, 42 insertions(+), 2 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/i386/pr98482-1.c
 create mode 100644 gcc/testsuite/gcc.target/i386/pr98482-2.c

diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index fad50e7e537..d3068462fcd 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -20794,8 +20794,30 @@ x86_function_profiler (FILE *file, int labelno ATTRIBUTE_UNUSED)
       fprintf (file, "\tleaq\t%sP%d(%%rip),%%r11\n", LPREFIX, labelno);
 #endif
 
-      if (!TARGET_PECOFF && flag_pic)
-	fprintf (file, "1:\tcall\t*%s@GOTPCREL(%%rip)\n", mcount_name);
+      if (!TARGET_PECOFF)
+	{
+	  switch (ix86_cmodel)
+	    {
+	    case CM_LARGE:
+	      /* NB: R10 is caller-saved.  Although it can be used as a
+		 static chain register, it is preserved when calling
+		 mcount for nested functions.  */
+	      fprintf (file, "1:\tmovabsq\t$%s, %%r10\n\tcall\t*%%r10\n",
+		       mcount_name);
+	      break;
+	    case CM_LARGE_PIC:
+	      sorry ("profiling %<-mcmodel=large%> with PIC is not supported");
+	      break;
+	    case CM_SMALL_PIC:
+	    case CM_MEDIUM_PIC:
+	      fprintf (file, "1:\tcall\t*%s@GOTPCREL(%%rip)\n",
+		       mcount_name);
+	      break;
+	    default:
+	      x86_print_call_or_nop (file, mcount_name);
+	      break;
+	    }
+	}
       else
 	x86_print_call_or_nop (file, mcount_name);
     }
diff --git a/gcc/testsuite/gcc.target/i386/pr98482-1.c b/gcc/testsuite/gcc.target/i386/pr98482-1.c
new file mode 100644
index 00000000000..72d5ccb269c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr98482-1.c
@@ -0,0 +1,9 @@
+/* { dg-do compile { target { *-*-linux* && { ! ia32 } } } } */
+/* { dg-require-effective-target mfentry } */
+/* { dg-options "-fprofile -mfentry -O2 -mcmodel=large" } */
+/* { dg-final { scan-assembler "movabsq\t\\\$__fentry__, %r10\n\tcall\t\\*%r10" } } */
+
+void
+func (void)
+{
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr98482-2.c b/gcc/testsuite/gcc.target/i386/pr98482-2.c
new file mode 100644
index 00000000000..aed3ca4b6ff
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr98482-2.c
@@ -0,0 +1,9 @@
+/* { dg-do compile { target { *-*-linux* && { ! ia32 } } } } */
+/* { dg-require-effective-target mfentry } */
+/* { dg-require-effective-target fpic } */
+/* { dg-options "-fpic -fprofile -mfentry -O2 -mcmodel=large" } */
+
+void
+func (void)
+{
+} /* { dg-message "sorry, unimplemented: profiling '-mcmodel=large' with PIC is not supported" } */
-- 
2.29.2


  reply	other threads:[~2021-01-08 12:51 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-08  9:24 Uros Bizjak
2021-01-08 12:50 ` H.J. Lu [this message]
2021-01-08 13:27   ` [PATCH] x86-64: Use R10 and R11 for profiling large model with PIC H.J. Lu
2021-01-08 14:31     ` Uros Bizjak
2021-01-08 14:43       ` H.J. Lu
2021-01-08 16:45         ` [PATCH] x86-64: Require lp64 for PR target/98482 tests H.J. Lu
  -- strict thread matches above, loose matches on Subject: below --
2021-01-07 23:49 [PATCH] x86-64: Use R10 for profiling large model H.J. Lu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAMe9rOpBTjxr-X3-5kjghTcJycXthojK8V7mQ+tzf5m-Z0Lj3g@mail.gmail.com \
    --to=hjl.tools@gmail.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=ubizjak@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).