OSDN Git Service

gcc/
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 27 Mar 2011 09:33:20 +0000 (09:33 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 27 Mar 2011 09:33:20 +0000 (09:33 +0000)
PR target/38598
* config/mips/mips.md (extendsidi2): Add an "l" alternative.
Update commentary.

gcc/testsuite/
PR target/38598
* gcc.target/mips/madd-7.c: Remove -mlong32.
* gcc.target/mips/msub-7.c: Likewise.

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

gcc/ChangeLog
gcc/config/mips/mips.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/mips/madd-7.c
gcc/testsuite/gcc.target/mips/msub-7.c

index c80e4ee..41c0ef2 100644 (file)
@@ -1,5 +1,11 @@
 2011-03-27  Richard Sandiford  <rdsandiford@googlemail.com>
 
+       PR target/38598
+       * config/mips/mips.md (extendsidi2): Add an "l" alternative.
+       Update commentary.
+
+2011-03-27  Richard Sandiford  <rdsandiford@googlemail.com>
+
        * config/mips/mips.c (mips_prepare_builtin_arg): Replace icode and
        opno arguments with an expand_operand.  Use create_input_operand.
        (mips_prepare_builtin_target): Delete.
index bb87103..c5276c0 100644 (file)
 ;; Extension insns.
 ;; Those for integer source operand are ordered widest source type first.
 
-;; When TARGET_64BIT, all SImode integer registers should already be in
-;; sign-extended form (see TRULY_NOOP_TRUNCATION and truncdisi2).  We can
-;; therefore get rid of register->register instructions if we constrain
-;; the source to be in the same register as the destination.
-;;
-;; The register alternative has type "arith" so that the pre-reload
-;; scheduler will treat it as a move.  This reflects what happens if
-;; the register alternative needs a reload.
+;; When TARGET_64BIT, all SImode integer and accumulator registers
+;; should already be in sign-extended form (see TRULY_NOOP_TRUNCATION
+;; and truncdisi2).  We can therefore get rid of register->register
+;; instructions if we constrain the source to be in the same register as
+;; the destination.
+;;
+;; Only the pre-reload scheduler sees the type of the register alternatives;
+;; we split them into nothing before the post-reload scheduler runs.
+;; These alternatives therefore have type "move" in order to reflect
+;; what happens if the two pre-reload operands cannot be tied, and are
+;; instead allocated two separate GPRs.  We don't distinguish between
+;; the GPR and LO cases because we don't usually know during pre-reload
+;; scheduling whether an operand will be LO or not.
 (define_insn_and_split "extendsidi2"
-  [(set (match_operand:DI 0 "register_operand" "=d,d")
-        (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "0,m")))]
+  [(set (match_operand:DI 0 "register_operand" "=d,l,d")
+        (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "0,0,m")))]
   "TARGET_64BIT"
   "@
    #
+   #
    lw\t%0,%1"
   "&& reload_completed && register_operand (operands[1], VOIDmode)"
   [(const_int 0)]
   emit_note (NOTE_INSN_DELETED);
   DONE;
 }
-  [(set_attr "move_type" "move,load")
+  [(set_attr "move_type" "move,move,load")
    (set_attr "mode" "DI")])
 
 (define_expand "extend<SHORT:mode><GPR:mode>2"
index df0ab83..781db97 100644 (file)
@@ -1,3 +1,9 @@
+2011-03-27  Richard Sandiford  <rdsandiford@googlemail.com>
+
+       PR target/38598
+       * gcc.target/mips/madd-7.c: Remove -mlong32.
+       * gcc.target/mips/msub-7.c: Likewise.
+
 2011-03-27  Ira Rosen  <ira.rosen@linaro.org>
 
        * gcc.dg/vect/vect-outer-5.c: Reduce the distance between data
index 93ed0fc..b43d720 100644 (file)
@@ -1,5 +1,4 @@
-/* -mlong32 added because of PR target/38598.  */
-/* { dg-options "-O2 -march=5kc -mlong32" } */
+/* { dg-options "-O2 -march=5kc" } */
 /* { dg-final { scan-assembler-not "\tmul\t" } } */
 /* { dg-final { scan-assembler "\tmadd\t" } } */
 
index ca90cee..7ae96ac 100644 (file)
@@ -1,5 +1,4 @@
-/* -mlong32 added because of PR target/38598.  */
-/* { dg-options "-O2 -march=5kc -mlong32" } */
+/* { dg-options "-O2 -march=5kc" } */
 /* { dg-final { scan-assembler-not "\tmul\t" } } */
 /* { dg-final { scan-assembler "\tmsub\t" } } */