aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Meissner <meissner@linux.vnet.ibm.com>2018-04-17 18:22:08 +0000
committerMichael Meissner <meissner@gcc.gnu.org>2018-04-17 18:22:08 +0000
commit63d6cbd1ff94e61809d84efab9794c18337b2568 (patch)
tree97ebf68c9c27ad9cde2343691eb98b18e3f481ac
parent21070494d80ebf9586ecf2fe9a3c24d34329e4db (diff)
downloadgcc-63d6cbd1ff94e61809d84efab9794c18337b2568.zip
gcc-63d6cbd1ff94e61809d84efab9794c18337b2568.tar.gz
gcc-63d6cbd1ff94e61809d84efab9794c18337b2568.tar.bz2
re PR target/85424 (The __builtin_packlongdouble function might have issues with the output overlapping the inputs)
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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/rs6000/rs6000.md16
2 files changed, 13 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f98824e..54dfb4f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 931c808..2b15cca 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -13934,16 +13934,14 @@
(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))]
{
@@ -13956,8 +13954,8 @@
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")