re PR target/85424 (The __builtin_packlongdouble function might have issues with...
authorMichael Meissner <meissner@linux.vnet.ibm.com>
Tue, 17 Apr 2018 18:22:08 +0000 (18:22 +0000)
committerMichael Meissner <meissner@gcc.gnu.org>
Tue, 17 Apr 2018 18:22:08 +0000 (18:22 +0000)
2018-04-17  Michael Meissner  <meissner@linux.vnet.ibm.com>

PR target/85424
* config/rs6000/rs6000.md (pack<mode>): Do not try handle a pack
where the inputs overlap with the output.

From-SVN: r259441

gcc/ChangeLog
gcc/config/rs6000/rs6000.md

index f98824ec3028ca7d2f9a5758306af9604c00dfa7..54dfb4ff35164b30a73c890e8200173d770df18b 100644 (file)
@@ -1,3 +1,9 @@
+2018-04-17  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       PR target/85424
+       * config/rs6000/rs6000.md (pack<mode>): Do not try handle a pack
+       where the inputs overlap with the output.
+
 2018-04-17  Jakub Jelinek  <jakub@redhat.com>
 
        * config/i386/sse.md (vec_extract_lo_<mode><mask_name>): Add
index 931c8086e8ce1fdee147e0db2fb9cdd28c134fa4..2b15cca88432938cfb1c751a2c3048a5785cea35 100644 (file)
    (set_attr "length" "4")])
 
 (define_insn_and_split "pack<mode>"
-  [(set (match_operand:FMOVE128 0 "register_operand" "=d,&d")
+  [(set (match_operand:FMOVE128 0 "register_operand" "=&d")
        (unspec:FMOVE128
-        [(match_operand:<FP128_64> 1 "register_operand" "0,d")
-         (match_operand:<FP128_64> 2 "register_operand" "d,d")]
+        [(match_operand:<FP128_64> 1 "register_operand" "d")
+         (match_operand:<FP128_64> 2 "register_operand" "d")]
         UNSPEC_PACK_128BIT))]
   "FLOAT128_2REG_P (<MODE>mode)"
-  "@
-   fmr %L0,%2
-   #"
-  "&& reload_completed && REGNO (operands[0]) != REGNO (operands[1])"
+  "#"
+  "&& reload_completed"
   [(set (match_dup 3) (match_dup 1))
    (set (match_dup 4) (match_dup 2))]
 {
   operands[3] = gen_rtx_REG (<FP128_64>mode, dest_hi);
   operands[4] = gen_rtx_REG (<FP128_64>mode, dest_lo);
 }
-  [(set_attr "type" "fpsimple,fp")
-   (set_attr "length" "4,8")])
+  [(set_attr "type" "fp")
+   (set_attr "length" "8")])
 
 (define_insn "unpack<mode>"
   [(set (match_operand:DI 0 "register_operand" "=wa,wa")