OSDN Git Service

gcc/
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 13 Nov 2010 17:32:46 +0000 (17:32 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 13 Nov 2010 17:32:46 +0000 (17:32 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@166717 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/mips/mips.c
gcc/config/mips/mips.md

index 08dd481..ee27611 100644 (file)
@@ -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.
index de587a5..242cc27 100644 (file)
@@ -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
index 2f9b779..2379eeb 100644 (file)
 ;;     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")])
    (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;
 }
    (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;
    (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;
    (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;