vect: Account for unused IFN_LOAD_LANES results
authorRichard Sandiford <richard.sandiford@arm.com>
Thu, 14 Jan 2021 11:36:25 +0000 (11:36 +0000)
committerRichard Sandiford <richard.sandiford@arm.com>
Thu, 14 Jan 2021 11:36:25 +0000 (11:36 +0000)
commite45c41988bfd655b1df7cff8fcf111dc6fb732e3
tree85a81838fedfbd72c45587b2ca0f098b73658759
parent48f8d1d48f2c7c2bc724dee979bcf56957f233cb
vect: Account for unused IFN_LOAD_LANES results

At the moment, if we use only one vector of an LD4 result,
we'll treat the LD4 as having the cost of a single load.
But all 4 loads and any associated permutes take place
regardless of which results are actually used.

This patch therefore counts the cost of unused LOAD_LANES
results against the first statement in a group.  An alternative
would be to multiply the ncopies of the first stmt by the group
size and treat other stmts in the group as having zero cost,
but I thought that might be more surprising when reading dumps.

gcc/
* tree-vect-stmts.c (vect_model_load_cost): Account for unused
IFN_LOAD_LANES results.

gcc/testsuite/
* gcc.target/aarch64/sve/cost_model_11.c: New test.
* gcc.target/aarch64/sve/mask_struct_load_5.c: Use
-fno-vect-cost-model.
gcc/testsuite/gcc.target/aarch64/sve/cost_model_11.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_5.c
gcc/tree-vect-stmts.c