optabs: Fix vec_perm -> V16QI middle end lowering.
authorAndreas Krebbel <krebbel@linux.vnet.ibm.com>
Tue, 19 May 2015 14:51:47 +0000 (14:51 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Tue, 19 May 2015 14:51:47 +0000 (14:51 +0000)
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

gcc/ChangeLog
gcc/optabs.c

index 8ae08e6dc70d4e1c29dccec49ff9e3347cb931c7..e261bc0f2fc4a0047c92c51368bb6c483c009138 100644 (file)
@@ -1,3 +1,7 @@
+2015-05-19  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       * optabs.c (expand_vec_perm): Don't re-use SEL as target operand.
+
 2015-05-19  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
 
        * config/s390/s390.c (s390_secondary_reload): Fix check for
index d883b000f0486d1dad04d1e7b82122d22994fe4b..5fa9eecb55f4feb0a10b51516b91b5779879f1ac 100644 (file)
@@ -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.  */