]> git.ipfire.org Git - people/ms/gcc.git/commit
Disable some VEC_COND_EXPR transformations after vector lowering
authorMarc Glisse <marc.glisse@inria.fr>
Fri, 7 Aug 2020 16:49:04 +0000 (18:49 +0200)
committerGiuliano Belinassi <giuliano.belinassi@usp.br>
Mon, 17 Aug 2020 18:07:48 +0000 (15:07 -0300)
commit10e74e97504463ca890ce0a0e03528f6b0242419
tree640ef3a1993129670b00594fbee264c075f5c2aa
parentef0a55a70b95cdb1a9ce394937dd9648e8eac4b1
Disable some VEC_COND_EXPR transformations after vector lowering

ARM understands VEC_COND_EXPR<v == w, -1, 0> but not a plain v == w which is
fed to something other than VEC_COND_EXPR (say BIT_IOR_EXPR). This patch avoids
introducing the second kind of statement after the vector lowering pass, which
is the last chance to turn v == w back into something the target handles.

This is just a workaround to avoid ICEs, a v == w produced before vector
lowering will yield pretty bad code. Either the arm target needs to learn to
handle vector comparisons (aarch64 already does), or the middle-end needs to
fall back to vcond when plain comparisons are not supported (or ...).

2020-08-07  Marc Glisse  <marc.glisse@inria.fr>

* generic-match-head.c (optimize_vectors_before_lowering_p): New
function.
* gimple-match-head.c (optimize_vectors_before_lowering_p):
Likewise.
* match.pd ((v ? w : 0) ? a : b, c1 ? c2 ? a : b : b): Use it.
gcc/generic-match-head.c
gcc/gimple-match-head.c
gcc/match.pd