aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/resolve.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2021-01-07 15:00:38 +0000
committerRichard Sandiford <richard.sandiford@arm.com>2021-01-07 15:00:38 +0000
commit78595e918ee168f595d16268073a3754c64d67fe (patch)
tree914c3e89c396d7605ea24d6dd356e0e5bc0d7944 /gcc/fortran/resolve.c
parentd54be5ad210b05274fbe43f9f61f9e903aabefb0 (diff)
downloadgcc-78595e918ee168f595d16268073a3754c64d67fe.zip
gcc-78595e918ee168f595d16268073a3754c64d67fe.tar.gz
gcc-78595e918ee168f595d16268073a3754c64d67fe.tar.bz2
gimple-isel: Fall back to using vcond_mask [PR98560]
PR98560 is about a case in which the vectoriser initially generates: mask_1 = a < 0; mask_2 = mask_1 & ...; res = VEC_COND_EXPR <mask_2, b, c>; The vectoriser thus expects res to be calculated using vcond_mask. However, we later manage to fold mask_2 to mask_1, leaving: mask_1 = a < 0; res = VEC_COND_EXPR <mask_1, b, c>; gimple-isel then required a combined vcond to exist. On most targets, it's not too onerous to provide all possible (compare x select) combinations. For each data mode, you just need to provide unsigned comparisons, signed comparisons, and floating-point comparisons, with the data mode and type of comparison uniquely determining the mode of the compared values. But for targets like SVE that support “unpacked” vectors, it's not that simple: the level of unpacking adds another degree of freedom. Rather than insist that the combined versions exist, I think we should be prepared to fall back to using separate comparisons and vcond_masks. I think that makes more sense on targets like AArch64 and AArch32 in which compares and selects are fundementally separate operations anyway. gcc/ PR tree-optimization/98560 * gimple-isel.cc (gimple_expand_vec_cond_expr): If we fail to use IFN_VCOND{,U,EQ}, fall back on IFN_VCOND_MASK. gcc/testsuite/ PR tree-optimization/98560 * gcc.dg/vect/pr98560-1.c: New test.
Diffstat (limited to 'gcc/fortran/resolve.c')
0 files changed, 0 insertions, 0 deletions