[AArch64][CostModel] Fix cost for mul <2 x i64>
authorSjoerd Meijer <sjoerd.meijer@arm.com>
Mon, 30 Nov 2020 11:16:10 +0000 (11:16 +0000)
committerSjoerd Meijer <sjoerd.meijer@arm.com>
Mon, 30 Nov 2020 11:36:55 +0000 (11:36 +0000)
commit5110ff08176f29eefd7638e328d65dfd1c1ad042
tree5167733e277dffa8fcd86dde4b3acc0d3ffc3bb2
parenta7f8d96b16a394a87230d592c727906f67a4ba07
[AArch64][CostModel] Fix cost for mul <2 x i64>

This was modeled to have a cost of 1, but since we do not have a MUL.2d this is
scalarized into vector inserts/extracts and scalar muls.

Motivating precommitted test is test/Transforms/SLPVectorizer/AArch64/mul.ll,
which we don't want to SLP vectorize.

Test Transforms/LoopVectorize/AArch64/extractvalue-no-scalarization-required.ll
unfortunately needed changing, but the reason is documented in
LoopVectorize.cpp:6855:

  // The cost of executing VF copies of the scalar instruction. This opcode
  // is unknown. Assume that it is the same as 'mul'.

which I will address next as a follow up of this.

Differential Revision: https://reviews.llvm.org/D92208
llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
llvm/test/Analysis/CostModel/AArch64/mul.ll
llvm/test/Transforms/LoopVectorize/AArch64/extractvalue-no-scalarization-required.ll
llvm/test/Transforms/SLPVectorizer/AArch64/mul.ll