re PR target/38598 (MIPS extendsidi2 does not have a LO alternative)
authorRichard Sandiford <rdsandiford@googlemail.com>
Sun, 27 Mar 2011 09:33:20 +0000 (09:33 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Sun, 27 Mar 2011 09:33:20 +0000 (09:33 +0000)
gcc/
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.

From-SVN: r171572

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 c80e4ee2c5707bdf9d4864d5ae3e145c9be24c64..41c0ef22801c5025de170edbe90ed5f0fd74277d 100644 (file)
@@ -1,3 +1,9 @@
+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
index bb871036327de0c59a3486fb02e4a31f9e7944f2..c5276c0dcfa8248093a3f59927e2bd3129d4a760 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)"
   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 df0ab831bc87087013e33cd0c15d6119c5f6e1a8..781db97ffd6f4f65a7535e9b729a1488b08f9fd5 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 93ed0fc6f06ae8d0e5dbff40cd9d4fa32d4beee8..b43d7207427821f281391c11fa590182fb8680f9 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 ca90cee9ea56cb6b25092617150c17f1b2469ac1..7ae96acb42ead34111114cc116c91bf84859fe4d 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" } } */