aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMichael Meissner <meissner@linux.ibm.com>2020-01-07 01:34:19 +0000
committerMichael Meissner <meissner@gcc.gnu.org>2020-01-07 01:34:19 +0000
commit3d53551b8809a2a673530aad9c7b5ccf2c26bbd3 (patch)
tree1f93a921caba2d8947d273f1d74e44c061a3b16f /gcc
parentdfef3500361057392f3c17e1f97883222347c0ef (diff)
downloadgcc-3d53551b8809a2a673530aad9c7b5ccf2c26bbd3.zip
gcc-3d53551b8809a2a673530aad9c7b5ccf2c26bbd3.tar.gz
gcc-3d53551b8809a2a673530aad9c7b5ccf2c26bbd3.tar.bz2
Fix bad code of vector extract of PC-relative address with variable element #.
2020-01-06 Michael Meissner <meissner@linux.ibm.com> * config/rs6000/vsx.md (vsx_extract_<mode>_var, VSX_D iterator): Use 'Q' for doing vector extract from memory. (vsx_extract_v4sf_var): Use 'Q' for doing vector extract from memory. (vsx_extract_<mode>_var, VSX_EXTRACT_I iterator): Use 'Q' for doing vector extract from memory. (vsx_extract_<mode>_<VS_scalar>mode_var): Use 'Q' for doing vector extract from memory. From-SVN: r279938
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/rs6000/vsx.md8
2 files changed, 13 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b2e6d85..0f258ff 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,14 @@
2020-01-06 Michael Meissner <meissner@linux.ibm.com>
+ * config/rs6000/vsx.md (vsx_extract_<mode>_var, VSX_D iterator):
+ Use 'Q' for doing vector extract from memory.
+ (vsx_extract_v4sf_var): Use 'Q' for doing vector extract from
+ memory.
+ (vsx_extract_<mode>_var, VSX_EXTRACT_I iterator): Use 'Q' for
+ doing vector extract from memory.
+ (vsx_extract_<mode>_<VS_scalar>mode_var): Use 'Q' for doing vector
+ extract from memory.
+
* config/rs6000/rs6000.c (rs6000_adjust_vec_address): Add support
for the offset being 34-bits when -mcpu=future is used.
diff --git a/gcc/config/rs6000/vsx.md b/gcc/config/rs6000/vsx.md
index 909f29b..189c7d8 100644
--- a/gcc/config/rs6000/vsx.md
+++ b/gcc/config/rs6000/vsx.md
@@ -3248,7 +3248,7 @@
;; Variable V2DI/V2DF extract
(define_insn_and_split "vsx_extract_<mode>_var"
[(set (match_operand:<VS_scalar> 0 "gpc_reg_operand" "=v,wa,r")
- (unspec:<VS_scalar> [(match_operand:VSX_D 1 "input_operand" "v,m,m")
+ (unspec:<VS_scalar> [(match_operand:VSX_D 1 "input_operand" "v,Q,Q")
(match_operand:DI 2 "gpc_reg_operand" "r,r,r")]
UNSPEC_VSX_EXTRACT))
(clobber (match_scratch:DI 3 "=r,&b,&b"))
@@ -3318,7 +3318,7 @@
;; Variable V4SF extract
(define_insn_and_split "vsx_extract_v4sf_var"
[(set (match_operand:SF 0 "gpc_reg_operand" "=wa,wa,?r")
- (unspec:SF [(match_operand:V4SF 1 "input_operand" "v,m,m")
+ (unspec:SF [(match_operand:V4SF 1 "input_operand" "v,Q,Q")
(match_operand:DI 2 "gpc_reg_operand" "r,r,r")]
UNSPEC_VSX_EXTRACT))
(clobber (match_scratch:DI 3 "=r,&b,&b"))
@@ -3681,7 +3681,7 @@
(define_insn_and_split "vsx_extract_<mode>_var"
[(set (match_operand:<VS_scalar> 0 "gpc_reg_operand" "=r,r,r")
(unspec:<VS_scalar>
- [(match_operand:VSX_EXTRACT_I 1 "input_operand" "v,v,m")
+ [(match_operand:VSX_EXTRACT_I 1 "input_operand" "v,v,Q")
(match_operand:DI 2 "gpc_reg_operand" "r,r,r")]
UNSPEC_VSX_EXTRACT))
(clobber (match_scratch:DI 3 "=r,r,&b"))
@@ -3701,7 +3701,7 @@
[(set (match_operand:<VS_scalar> 0 "gpc_reg_operand" "=r,r,r")
(zero_extend:<VS_scalar>
(unspec:<VSX_EXTRACT_I:VS_scalar>
- [(match_operand:VSX_EXTRACT_I 1 "input_operand" "v,v,m")
+ [(match_operand:VSX_EXTRACT_I 1 "input_operand" "v,v,Q")
(match_operand:DI 2 "gpc_reg_operand" "r,r,r")]
UNSPEC_VSX_EXTRACT)))
(clobber (match_scratch:DI 3 "=r,r,&b"))