aboutsummaryrefslogtreecommitdiff
path: root/gcc/optabs.c
diff options
context:
space:
mode:
authorAndreas Krebbel <krebbel@linux.vnet.ibm.com>2015-05-19 14:51:47 +0000
committerAndreas Krebbel <krebbel@gcc.gnu.org>2015-05-19 14:51:47 +0000
commita2780ddb46556eac870f843df4dca394a48844bb (patch)
tree8f9016957b046d14ea2fa168b38119c22cd95089 /gcc/optabs.c
parent057021105092a95a712e4237959025683bee7d42 (diff)
downloadgcc-a2780ddb46556eac870f843df4dca394a48844bb.zip
gcc-a2780ddb46556eac870f843df4dca394a48844bb.tar.gz
gcc-a2780ddb46556eac870f843df4dca394a48844bb.tar.bz2
optabs: Fix vec_perm -> V16QI middle end lowering.
The current implementation re-uses the location of the selection pattern to generate a new one. This fails if the pattern resides in a read-only location. gcc/ * optabs.c (expand_vec_perm): Don't re-use SEL as target operand. From-SVN: r223369
Diffstat (limited to 'gcc/optabs.c')
-rw-r--r--gcc/optabs.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/gcc/optabs.c b/gcc/optabs.c
index d883b00..5fa9eec 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -6777,11 +6777,11 @@ expand_vec_perm (machine_mode mode, rtx v0, rtx v1, rtx sel, rtx target)
machine_mode selmode = GET_MODE (sel);
if (u == 2)
sel = expand_simple_binop (selmode, PLUS, sel, sel,
- sel, 0, OPTAB_DIRECT);
+ NULL, 0, OPTAB_DIRECT);
else
sel = expand_simple_binop (selmode, ASHIFT, sel,
GEN_INT (exact_log2 (u)),
- sel, 0, OPTAB_DIRECT);
+ NULL, 0, OPTAB_DIRECT);
gcc_assert (sel != NULL);
/* Broadcast the low byte each element into each of its bytes. */