Shortcut identity VEC_PERM expansion [PR94710]
authorJakub Jelinek <jakub@redhat.com>
Thu, 23 Apr 2020 19:57:50 +0000 (21:57 +0200)
committerJakub Jelinek <jakub@redhat.com>
Thu, 23 Apr 2020 19:59:01 +0000 (21:59 +0200)
This PR is about the rs6000 backend emitting wrong assembly
for whole vector shift by 0, and while I think it is desirable
to fix the backend, I don't see a point why the expander should
try to emit that, whole vector shift by 0 is identity, we can just
return the operand.

2020-04-23  Jakub Jelinek  <jakub@redhat.com>

PR target/94710
* optabs.c (expand_vec_perm_const): For shift_amt const0_rtx
just return v2.

gcc/ChangeLog
gcc/optabs.c

index 5ddb4332047ee27b28b94910044b92677c7cbb1c..54e207cbe588fbf978bb9d67d2b9b693ad99e5ce 100644 (file)
@@ -1,5 +1,9 @@
 2020-04-23  Jakub Jelinek  <jakub@redhat.com>
 
+       PR target/94710
+       * optabs.c (expand_vec_perm_const): For shift_amt const0_rtx
+       just return v2.
+
        PR middle-end/94724
        * tree.c (get_narrower): Instead of creating COMPOUND_EXPRs
        temporarily with non-final second operand and updating it later,
index 1456e59ffa7eba12d0d2ae10862038cb4ea4b00e..d85ce47f7624d2e808a77bc9a79bb3b283753144 100644 (file)
@@ -5627,6 +5627,8 @@ expand_vec_perm_const (machine_mode mode, rtx v0, rtx v1,
       if (shift_amt)
        {
          class expand_operand ops[3];
+         if (shift_amt == const0_rtx)
+           return v2;
          if (shift_code != CODE_FOR_nothing)
            {
              create_output_operand (&ops[0], target, mode);