[PATCH] D12724: [CostModel][AArch64] Remove amortization factor for some of the vector select instructions
James Molloy via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 9 04:48:44 PDT 2015
Hi Silviu,
I agree that we're no longer pessimizing select patterns on ARM or AArch64
with oversize vectors (although I haven't checked i64's, so I'll take your
advice there), so this LGTM.
But please wait for any objections from Nadav/Arnold/Gerolf as it was Nadav
and Arnold who added this change in the first place (copied from ARM).
James
On Wed, 9 Sep 2015 at 12:44 silviu.baranga at arm.com via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> sbaranga created this revision.
> sbaranga added a subscriber: llvm-commits.
> Herald added subscribers: rengolin, aemerson.
>
> We are not scalarizing the wide selects in codegen for i16 and i32 and
> therefore we can remove the amortization factor. We still have issues
> with i64 vectors in codegen though.
>
> http://reviews.llvm.org/D12724
>
> Files:
> lib/Target/AArch64/AArch64TargetTransformInfo.cpp
> test/Analysis/CostModel/AArch64/select.ll
>
> Index: lib/Target/AArch64/AArch64TargetTransformInfo.cpp
> ===================================================================
> --- lib/Target/AArch64/AArch64TargetTransformInfo.cpp
> +++ lib/Target/AArch64/AArch64TargetTransformInfo.cpp
> @@ -380,15 +380,16 @@
> Type *CondTy) {
>
> int ISD = TLI->InstructionOpcodeToISD(Opcode);
> - // We don't lower vector selects well that are wider than the register
> width.
> + // We don't lower some vector selects well that are wider than the
> register
> + // width.
> if (ValTy->isVectorTy() && ISD == ISD::SELECT) {
> // We would need this many instructions to hide the scalarization
> happening.
> const int AmortizationCost = 20;
> static const TypeConversionCostTblEntry<MVT::SimpleValueType>
> VectorSelectTbl[] = {
> - { ISD::SELECT, MVT::v16i1, MVT::v16i16, 16 * AmortizationCost },
> - { ISD::SELECT, MVT::v8i1, MVT::v8i32, 8 * AmortizationCost },
> - { ISD::SELECT, MVT::v16i1, MVT::v16i32, 16 * AmortizationCost },
> + { ISD::SELECT, MVT::v16i1, MVT::v16i16, 16 },
> + { ISD::SELECT, MVT::v8i1, MVT::v8i32, 8 },
> + { ISD::SELECT, MVT::v16i1, MVT::v16i32, 16 },
> { ISD::SELECT, MVT::v4i1, MVT::v4i64, 4 * AmortizationCost },
> { ISD::SELECT, MVT::v8i1, MVT::v8i64, 8 * AmortizationCost },
> { ISD::SELECT, MVT::v16i1, MVT::v16i64, 16 * AmortizationCost }
> Index: test/Analysis/CostModel/AArch64/select.ll
> ===================================================================
> --- test/Analysis/CostModel/AArch64/select.ll
> +++ test/Analysis/CostModel/AArch64/select.ll
> @@ -17,22 +17,22 @@
> ; CHECK: cost of 1 {{.*}} select
> %v6 = select i1 undef, double undef, double undef
>
> - ; Vector values - check for vectors that have a high cost because they
> end up
> - ; scalarized.
> - ; CHECK: cost of 320 {{.*}} select
> + ; CHECK: cost of 16 {{.*}} select
> %v13b = select <16 x i1> undef, <16 x i16> undef, <16 x i16> undef
>
> - ; CHECK: cost of 160 {{.*}} select
> + ; CHECK: cost of 8 {{.*}} select
> %v15b = select <8 x i1> undef, <8 x i32> undef, <8 x i32> undef
> - ; CHECK: cost of 320 {{.*}} select
> + ; CHECK: cost of 16 {{.*}} select
> %v15c = select <16 x i1> undef, <16 x i32> undef, <16 x i32> undef
>
> + ; Vector values - check for vectors of i64s that have a high cost
> because
> + ; they end up scalarized.
> ; CHECK: cost of 80 {{.*}} select
> %v16a = select <4 x i1> undef, <4 x i64> undef, <4 x i64> undef
> ; CHECK: cost of 160 {{.*}} select
> %v16b = select <8 x i1> undef, <8 x i64> undef, <8 x i64> undef
> ; CHECK: cost of 320 {{.*}} select
> %v16c = select <16 x i1> undef, <16 x i64> undef, <16 x i64> undef
>
> - ret void
> + ret void
> }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150909/82bdbb32/attachment-0001.html>
More information about the llvm-commits
mailing list