public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Xi Ruoyao <xry111@xry111.site>
To: chenglulu <chenglulu@loongson.cn>, gcc-patches@gcc.gnu.org
Cc: i@xen0n.name, xuchenghua@loongson.cn
Subject: Re: [PATCH v1] LoongArch: Added code generation support for call36 function calls.
Date: Wed, 15 Nov 2023 04:26:19 +0800	[thread overview]
Message-ID: <086495273b4f2a721c3b6e15859781cdc8134966.camel@xry111.site> (raw)
In-Reply-To: <4969dd47-01d9-0b79-e7ac-6683ed166eac@loongson.cn>

On Tue, 2023-11-14 at 20:46 +0800, chenglulu wrote:
> 
> 在 2023/11/14 下午5:55, Xi Ruoyao 写道:
> > On Tue, 2023-11-14 at 17:45 +0800, Lulu Cheng wrote:
> > > +      /* When function calls are made through call36, t0 register
> > > will be
> > > +	 implicitly modified, so '-fno-ipa-ra' needs to be set
> > > here.  */
> > >         case CMODEL_MEDIUM:
> > > +	if (HAVE_AS_SUPPORT_CALL36)
> > > +	  opts->x_flag_ipa_ra = 0;
> > > +	break;
> > Maybe we can add a (clobber (reg:P 12)) to the related insns
> > instead?
> > 
> Sorry, this was modified in accordance with the call36 macro
> instruction 
> during the test.
> I will use clobber, and add test cases.

There seems a better solution as suggested by the GCC internal doc. 
Section 18.9.16 mentions -fipa-ra:

 -- Target Hook: bool TARGET_CALL_FUSAGE_CONTAINS_NON_CALLEE_CLOBBERS
     Set to true if each call that binds to a local definition
     explicitly clobbers or sets all non-fixed registers modified by
     performing the call.  That is, by the call pattern itself, or by
     code that might be inserted by the linker (e.g. stubs, veneers,
     branch islands), but not including those modifiable by the callee.
     The affected registers may be mentioned explicitly in the call
     pattern, or included as clobbers in CALL_INSN_FUNCTION_USAGE. The
     default version of this hook is set to false.  The purpose of this
     hook is to enable the fipa-ra optimization.

So we can add t0 into CALL_INSN_FUNCTION_USAGE of the call insn, like:

diff --git a/gcc/config/loongarch/loongarch.md b/gcc/config/loongarch/loongarch.md
index ea36542b1c3..96e7e98e6b3 100644
--- a/gcc/config/loongarch/loongarch.md
+++ b/gcc/config/loongarch/loongarch.md
@@ -3274,7 +3274,14 @@ (define_expand "sibcall"
 					    XEXP (target, 1),
 					    operands[1]));
   else
-    emit_call_insn (gen_sibcall_internal (target, operands[1]));
+    {
+      rtx call = gen_sibcall_internal (target, operands[1]);
+
+      if (TARGET_CMODEL_MEDIUM && !REG_P (target))
+	clobber_reg (&CALL_INSN_FUNCTION_USAGE (call),
+		     gen_rtx_REG (Pmode, T0_REGNUM));
+      emit_call_insn (call);
+    }
   DONE;
 })

Likewise for sibcall_value.

By the way we'd better have a command line switch to override the build-
time check for assembler call36 support, because it makes writing test
cases and inter-operating with different versions of assembler easier.

-- 
Xi Ruoyao <xry111@xry111.site>
School of Aerospace Science and Technology, Xidian University

  reply	other threads:[~2023-11-14 20:26 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-14  9:45 Lulu Cheng
2023-11-14  9:55 ` Xi Ruoyao
2023-11-14 12:46   ` chenglulu
2023-11-14 20:26     ` Xi Ruoyao [this message]
2023-11-14 20:42       ` Xi Ruoyao
2023-11-14 20:46         ` Xi Ruoyao

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=086495273b4f2a721c3b6e15859781cdc8134966.camel@xry111.site \
    --to=xry111@xry111.site \
    --cc=chenglulu@loongson.cn \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=i@xen0n.name \
    --cc=xuchenghua@loongson.cn \
    /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).