diff options
author | Andreas Krebbel <krebbel@linux.vnet.ibm.com> | 2015-05-19 14:51:47 +0000 |
---|---|---|
committer | Andreas Krebbel <krebbel@gcc.gnu.org> | 2015-05-19 14:51:47 +0000 |
commit | a2780ddb46556eac870f843df4dca394a48844bb (patch) | |
tree | 8f9016957b046d14ea2fa168b38119c22cd95089 /gcc/optabs.c | |
parent | 057021105092a95a712e4237959025683bee7d42 (diff) | |
download | gcc-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.c | 4 |
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. */ |