aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2010-11-13 18:32:46 +0100
committerRichard Sandiford <rsandifo@gcc.gnu.org>2010-11-13 17:32:46 +0000
commit82220036f6aff4fce8fc563a13bc591b0b10bfd9 (patch)
tree4191e520d92f7dcf0478189250280512dd97d500 /gcc
parent98824c6fc45b6262b807091ec68193decef6ba0c (diff)
downloadgcc-82220036f6aff4fce8fc563a13bc591b0b10bfd9.zip
gcc-82220036f6aff4fce8fc563a13bc591b0b10bfd9.tar.gz
gcc-82220036f6aff4fce8fc563a13bc591b0b10bfd9.tar.bz2
mips.md (call_internal): Pass curr_insn to mips_split_call.
gcc/ 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. From-SVN: r166717
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/config/mips/mips.c6
-rw-r--r--gcc/config/mips/mips.md22
3 files changed, 22 insertions, 17 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 08dd481..ee27611 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,14 @@
+2010-11-13 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.
+
2010-11-13 Mingming Sun <mingm.sun@gmail.com>
* doc/invoke.texi (MIPS Options): Add loongson3a processor.
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index de587a5..242cc27 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -6520,11 +6520,7 @@ mips_expand_call (enum mips_call_type type, rtx result, rtx addr,
void
mips_split_call (rtx insn, rtx call_pattern)
{
- rtx new_insn;
-
- new_insn = emit_call_insn (call_pattern);
- CALL_INSN_FUNCTION_USAGE (new_insn)
- = copy_rtx (CALL_INSN_FUNCTION_USAGE (insn));
+ emit_call_insn (call_pattern);
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
diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md
index 2f9b779..2379eeb 100644
--- a/gcc/config/mips/mips.md
+++ b/gcc/config/mips/mips.md
@@ -6051,18 +6051,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")])
@@ -6087,10 +6085,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;
}
@@ -6126,10 +6124,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;
@@ -6155,10 +6153,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;
@@ -6187,10 +6185,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;