aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorTamar Christina <tamar.christina@arm.com>2023-08-04 13:48:35 +0100
committerTamar Christina <tamar.christina@arm.com>2023-08-04 13:48:35 +0100
commit8787b195f014883a2d2454faf2001303dfefef8c (patch)
tree1f7555013b6ac121d5e84266ab9efca02a1db53d /gcc/cp
parent0e5205912994fbc43719b43282a62bb35957f8a2 (diff)
downloadgcc-8787b195f014883a2d2454faf2001303dfefef8c.zip
gcc-8787b195f014883a2d2454faf2001303dfefef8c.tar.gz
gcc-8787b195f014883a2d2454faf2001303dfefef8c.tar.bz2
AArch64: update costing for combining vector conditionals
boolean comparisons have different cost depending on the mode. e.g. for SVE, a && b doesn't require an additional instruction when a or b is predicated by combining the predicate of the one operation into the second one. At the moment though we only fuse compares so this update requires one of the operands to be a comparison. Scalars also don't require this because the non-ifcvt variant is a series of branches where following the branch sequences themselves are natural ANDs. Advanced SIMD however does require an actual AND to combine the boolean values. As such this patch discounts Scalar and SVE boolean operation latency and throughput. With this patch comparison heavy code prefers SVE as it should, especially in cases with SVE VL == Advanced SIMD VL where previously the SVE prologue costs would tip it towards Advanced SIMD. gcc/ChangeLog: * config/aarch64/aarch64.cc (aarch64_bool_compound_p): New. (aarch64_adjust_stmt_cost, aarch64_vector_costs::count_ops): Use it.
Diffstat (limited to 'gcc/cp')
0 files changed, 0 insertions, 0 deletions