[AArch64][SVE] Fold constant multiply of element count
authorCullen Rhodes <cullen.rhodes@arm.com>
Wed, 4 Dec 2019 14:20:33 +0000 (14:20 +0000)
committerCullen Rhodes <cullen.rhodes@arm.com>
Fri, 20 Dec 2019 11:58:00 +0000 (11:58 +0000)
commit974f00a4369371fae9d25477753c0f68f331e05a
treea75c90d3eb77b65f1ab37533d21b115fff648bc8
parentb2371791fc74b2ecad7f608ff8592ec512d098e6
[AArch64][SVE] Fold constant multiply of element count

Summary:
E.g.

  %0 = tail call i64 @llvm.aarch64.sve.cntw(i32 31)
  %mul = mul i64 %0, <const>

Should emit:

  cntw    x0, all, mul #<const>

For <const> in the range 1-16.

Patch by Kerry McLaughlin

Reviewers: sdesmalen, huntergr, dancgr, rengolin, efriedma

Reviewed By: sdesmalen

Subscribers: tschuett, kristof.beyls, hiraditya, rkruppe, psnobl, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D71014
llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
llvm/lib/Target/AArch64/SVEInstrFormats.td
llvm/test/CodeGen/AArch64/sve-intrinsics-counting-elems.ll