[gcc r11-9515] aarch64: [PR101529] Fix vector shuffle insertion expansion

Andrew Pinski pinskia@gcc.gnu.org
Wed Jan 26 17:51:39 GMT 2022


https://gcc.gnu.org/g:193e5ee46e5a4f0650dc1ccbdaec5d2e84f2a451

commit r11-9515-g193e5ee46e5a4f0650dc1ccbdaec5d2e84f2a451
Author: Andrew Pinski <apinski@marvell.com>
Date:   Sat Nov 6 06:29:13 2021 +0000

    aarch64: [PR101529] Fix vector shuffle insertion expansion
    
    The function aarch64_evpc_ins would reuse the target even though
    it might be the same register as the two inputs.
    Instead of checking to see if we can reuse the target, just use the
    original input directly.
    
    Committed as approved after bootstrapped and tested on
    aarch64-linux-gnu with no regressions.
    Note the testcases are not backported as __builtin_shufflevector
    does not exist in GCC 11.
    
            PR target/101529
    
    gcc/ChangeLog:
    
            * config/aarch64/aarch64.c (aarch64_evpc_ins): Don't use target
            as an input, use original one.
    
    (cherry picked from commit 52fa771758635d9c53cddb9116e5a66fae592230)

Diff:
---
 gcc/config/aarch64/aarch64.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index bbcf5ed4a61..b58a379759d 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -23026,11 +23026,10 @@ aarch64_evpc_ins (struct expand_vec_perm_d *d)
     }
   gcc_assert (extractindex < nelt);
 
-  emit_move_insn (d->target, insv);
   insn_code icode = code_for_aarch64_simd_vec_copy_lane (mode);
   expand_operand ops[5];
   create_output_operand (&ops[0], d->target, mode);
-  create_input_operand (&ops[1], d->target, mode);
+  create_input_operand (&ops[1], insv, mode);
   create_integer_operand (&ops[2], 1 << idx);
   create_input_operand (&ops[3], extractv, mode);
   create_integer_operand (&ops[4], extractindex);


More information about the Gcc-cvs mailing list