]> git.ipfire.org Git - thirdparty/gcc.git/commit
rs6000: Remove "+" constraint modifier from *vsx_le_perm_store_* insns
authorKewen Lin <linkw@linux.ibm.com>
Wed, 21 Aug 2024 05:26:20 +0000 (00:26 -0500)
committerKewen Lin <linkw@gcc.gnu.org>
Wed, 21 Aug 2024 05:26:20 +0000 (00:26 -0500)
commit34292a1ae89a13baf974ff2ecb21dcf89aab4617
treed4e96175c8355c8ff6f05c4a14dc82484be84c5b
parentae53e4b99eaad43424f2b0cc1bbabb3b454fb6d8
rs6000: Remove "+" constraint modifier from *vsx_le_perm_store_* insns

Since *vsx_le_perm_store_* can be split into vector
permute and vector store, after reload_completed, we reuse
the operand 1 as the destination of vector permute, so we
set operand 1 with constraint modifier "+".  But since
it's taken as pure input in DF and most passes as Richard
pointed out in [1], to ensure it's correct when operand 1
is still live, we actually restore the operand 1's value
after the store with vector permute, that is:
  op1 = vector permute op1 (doubleword swapping)
  op0 = op2
  op1 = vector permute op1 (doubleword swapping)
, it means op1's value isn't changed by this insn.

So according to the comments from Richard and Segher in
that thread, this patch is to remove the "+" constraint
modifier of operand 1 from *vsx_le_perm_store_* insns.

[1] https://gcc.gnu.org/pipermail/gcc-patches/2024-August/660145.html

gcc/ChangeLog:

* config/rs6000/vsx.md (define_insn *vsx_le_perm_store_{<VSX_D:mode>,
<VSX_W:mode>,v8hi,v16qi,<VSX_LE_128:mode>}): Remove constraint modifier
"+" from operand 1.
gcc/config/rs6000/vsx.md