[PATCH][AArch64] PR target/68696 FAIL: gcc.target/aarch64/vbslq_u64_1.c scan-assembler-times bif\tv 1
Kyrill Tkachov
kyrylo.tkachov@arm.com
Tue Dec 8 09:21:00 GMT 2015
Hi all,
The test gcc.target/aarch64/vbslq_u64_1.c started failing recently due to some tree-level changes.
This just exposed a deficiency in our xor-and-xor pattern for the vector bit-select pattern:
aarch64_simd_bsl<mode>_internal.
We now fail to match the rtx:
(set (reg:V4SI 79)
(xor:V4SI (and:V4SI (xor:V4SI (reg:V4SI 32 v0 [ a ])
(reg/v:V4SI 77 [ b ]))
(reg:V4SI 34 v2 [ mask ]))
(reg/v:V4SI 77 [ b ])))
whereas before combine attempted:
(set (reg:V4SI 79)
(xor:V4SI (and:V4SI (xor:V4SI (reg/v:V4SI 77 [ b ])
(reg:V4SI 32 v0 [ a ]))
(reg:V4SI 34 v2 [ mask ]))
(reg/v:V4SI 77 [ b ])))
Note that just the order of the operands of the inner XOR has changed.
This could be solved by making the second operand of the outer XOR a 4th operand
of the pattern, enforcing that it should be equal to operand 2 or 3 in the pattern
condition and performing the appropriate swapping in the output template.
However, the aarch64_simd_bsl<mode>_internal pattern is expanded to by other
places in aarch64-simd.md and updating all the callsites to add a 4th operand is
wasteful and makes them harder to understand.
Therefore this patch adds a new define_insn with the match_dup of operand 2 in
the outer XOR. I also had to update the alternatives/constraints in the pattern
and the output template. Basically it involves swapping operands 2 and 3 around in the
constraints and output templates.
The test now combines to a single vector bfi instruction again.
Bootstrapped and tested on aarch64.
Ok for trunk?
Thanks,
Kyrill
2015-12-08 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
PR target/68696
* config/aarch64/aarch64-simd.md (*aarch64_simd_bsl<mode>_alt):
New pattern.
(aarch64_simd_bsl<mode>_internal): Update comment to reflect
the above.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: aarch64-bfi-vec.patch
Type: text/x-patch
Size: 1998 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20151208/412d2c8b/attachment.bin>
More information about the Gcc-patches
mailing list