]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR target/85424 (The __builtin_packlongdouble function might have issues...
authorMichael Meissner <meissner@linux.vnet.ibm.com>
Mon, 25 Jun 2018 23:28:27 +0000 (23:28 +0000)
committerMichael Meissner <meissner@gcc.gnu.org>
Mon, 25 Jun 2018 23:28:27 +0000 (23:28 +0000)
2018-06-25  Michael Meissner  <meissner@linux.vnet.ibm.com>

Back port from trunk
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: r262122

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

index 0249c09b260df574b82eee66d7222f39ec2c4cc3..e6f90dae8190af80ad31a027d71bc3a239f54738 100644 (file)
@@ -1,3 +1,12 @@
+2018-06-25  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       Back port from trunk
+       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-06-25  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/84786
index ca7c04e275a969b3f90b5678a1f2892941efa7f7..4428a1e294421190879c1ee150504346d63cb166 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" "=d,d")