public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Uros Bizjak <ubizjak@gmail.com>
To: Uros Bizjak <ubizjak@gmail.com>,
	gcc-patches@gcc.gnu.org, rdsandiford@googlemail.com
Subject: Re: [PATCH, MIPS]: Remove ugly hack from "call_internal" splitter
Date: Wed, 03 Nov 2010 21:40:00 -0000	[thread overview]
Message-ID: <AANLkTi=DvZbab6F3tFrEXTbpV0to+_xcPjWo+kyEf9p_@mail.gmail.com> (raw)
In-Reply-To: <87bp66gkzc.fsf@firetop.home>

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

On Wed, Nov 3, 2010 at 10:23 PM, Richard Sandiford
<rdsandiford@googlemail.com> wrote:
> Uros Bizjak <ubizjak@gmail.com> writes:
>> Hello!
>>
>> We should simply use curr_insn instead of an ugly hack.
>>
>> 2010-11-02  Uros Bizjak  <ubizjak@gmail.com>
>>
>>       * config/mips/mips.md (call_internal): Pass curr_insn to
>>       mips_split_call.
>>
>> Compile tested on x86_64-pc-linux-gnu for mips-elf cross.
>
> Please do the call splitters too.  OK with that change if it
> passes regression testing.

In addition to other call splitters, I noticed that mips_split_call
copies CALL_INSN_FUNCTION_USAGE to splitted call_insn pattern. This is
not necessary, since try_split will do that automatically (se
emit-rtl.c, around line 3459).

2010-11-03  Uros Bizjak  <ubizjak@gmail.com>

	* config/mips/mips.md (call_internal): Pass curr_insn to
	mips_split_call.
	(call_internal_direct): Ditto.
	(call_value_internal): Ditto.
	(call_value_internal_direct): Ditto.
	(call_value_multiple_internal): Ditto.
	* config/mips/mips.c (mips_split_call): Do not copy
	CALL_INSN_FUNCTION_USAGE here.

Attached patch was tested by building a cross to mips-elf.
Unfortunatelly, I have no access to real mips target, so I would like
to ask somebody if can do a regression test of attached patch.

Uros.

[-- Attachment #2: m.diff.txt --]
[-- Type: text/plain, Size: 3373 bytes --]

Index: gcc/config/mips/mips.md
===================================================================
--- gcc/config/mips/mips.md	(revision 166247)
+++ gcc/config/mips/mips.md	(working copy)
@@ -6033,18 +6033,16 @@
 ;;     But once we generate the separate insns, it becomes obvious that
 ;;     $gp is not live on entry to the call.
 ;;
-;; ??? The operands[2] = insn check is a hack to make the original insn
-;; available to the splitter.
 (define_insn_and_split "call_internal"
   [(call (mem:SI (match_operand 0 "call_insn_operand" "c,S"))
 	 (match_operand 1 "" ""))
    (clobber (reg:SI RETURN_ADDR_REGNUM))]
   ""
   { return TARGET_SPLIT_CALLS ? "#" : MIPS_CALL ("jal", operands, 0, 1); }
-  "reload_completed && TARGET_SPLIT_CALLS && (operands[2] = insn)"
+  "reload_completed && TARGET_SPLIT_CALLS"
   [(const_int 0)]
 {
-  mips_split_call (operands[2], gen_call_split (operands[0], operands[1]));
+  mips_split_call (curr_insn, gen_call_split (operands[0], operands[1]));
   DONE;
 }
   [(set_attr "jal" "indirect,direct")])
@@ -6069,10 +6067,10 @@
    (clobber (reg:SI RETURN_ADDR_REGNUM))]
   ""
   { return TARGET_SPLIT_CALLS ? "#" : MIPS_CALL ("jal", operands, 0, -1); }
-  "reload_completed && TARGET_SPLIT_CALLS && (operands[2] = insn)"
+  "reload_completed && TARGET_SPLIT_CALLS"
   [(const_int 0)]
 {
-  mips_split_call (operands[2],
+  mips_split_call (curr_insn,
 		   gen_call_direct_split (operands[0], operands[1]));
   DONE;
 }
@@ -6108,10 +6106,10 @@
    (clobber (reg:SI RETURN_ADDR_REGNUM))]
   ""
   { return TARGET_SPLIT_CALLS ? "#" : MIPS_CALL ("jal", operands, 1, 2); }
-  "reload_completed && TARGET_SPLIT_CALLS && (operands[3] = insn)"
+  "reload_completed && TARGET_SPLIT_CALLS"
   [(const_int 0)]
 {
-  mips_split_call (operands[3],
+  mips_split_call (curr_insn,
 		   gen_call_value_split (operands[0], operands[1],
 					 operands[2]));
   DONE;
@@ -6137,10 +6135,10 @@
    (clobber (reg:SI RETURN_ADDR_REGNUM))]
   ""
   { return TARGET_SPLIT_CALLS ? "#" : MIPS_CALL ("jal", operands, 1, -1); }
-  "reload_completed && TARGET_SPLIT_CALLS && (operands[3] = insn)"
+  "reload_completed && TARGET_SPLIT_CALLS"
   [(const_int 0)]
 {
-  mips_split_call (operands[3],
+  mips_split_call (curr_insn,
 		   gen_call_value_direct_split (operands[0], operands[1],
 						operands[2]));
   DONE;
@@ -6169,10 +6167,10 @@
    (clobber (reg:SI RETURN_ADDR_REGNUM))]
   ""
   { return TARGET_SPLIT_CALLS ? "#" : MIPS_CALL ("jal", operands, 1, 2); }
-  "reload_completed && TARGET_SPLIT_CALLS && (operands[4] = insn)"
+  "reload_completed && TARGET_SPLIT_CALLS"
   [(const_int 0)]
 {
-  mips_split_call (operands[4],
+  mips_split_call (curr_insn,
 		   gen_call_value_multiple_split (operands[0], operands[1],
 						  operands[2], operands[3]));
   DONE;
Index: gcc/config/mips/mips.c
===================================================================
--- gcc/config/mips/mips.c	(revision 166247)
+++ gcc/config/mips/mips.c	(working copy)
@@ -6519,8 +6519,6 @@ mips_split_call (rtx insn, rtx call_patt
   rtx new_insn;
 
   new_insn = emit_call_insn (call_pattern);
-  CALL_INSN_FUNCTION_USAGE (new_insn)
-    = copy_rtx (CALL_INSN_FUNCTION_USAGE (insn));
   if (!find_reg_note (insn, REG_NORETURN, 0))
     /* Pick a temporary register that is suitable for both MIPS16 and
        non-MIPS16 code.  $4 and $5 are used for returning complex double

  parent reply	other threads:[~2010-11-03 21:40 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-02  8:22 Uros Bizjak
2010-11-03 21:27 ` Richard Sandiford
2010-11-03 21:40   ` Richard Sandiford
2010-11-03 21:40   ` Uros Bizjak [this message]
2010-11-13 18:03     ` Richard Sandiford

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='AANLkTi=DvZbab6F3tFrEXTbpV0to+_xcPjWo+kyEf9p_@mail.gmail.com' \
    --to=ubizjak@gmail.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=rdsandiford@googlemail.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).