diff options
author | Michael Meissner <meissner@linux.vnet.ibm.com> | 2018-04-17 18:22:08 +0000 |
---|---|---|
committer | Michael Meissner <meissner@gcc.gnu.org> | 2018-04-17 18:22:08 +0000 |
commit | 63d6cbd1ff94e61809d84efab9794c18337b2568 (patch) | |
tree | 97ebf68c9c27ad9cde2343691eb98b18e3f481ac | |
parent | 21070494d80ebf9586ecf2fe9a3c24d34329e4db (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 16 |
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") |