[llvm-branch-commits] [llvm] 4a2c05b - [ARM] Fix for MVE i128 vector icmp costs.
Tobias Hieta via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Oct 17 23:30:17 PDT 2022
Author: David Green
Date: 2022-10-18T08:29:45+02:00
New Revision: 4a2c05b05ed07f1f620e94f6524a8b4b2760a0b1
URL: https://github.com/llvm/llvm-project/commit/4a2c05b05ed07f1f620e94f6524a8b4b2760a0b1
DIFF: https://github.com/llvm/llvm-project/commit/4a2c05b05ed07f1f620e94f6524a8b4b2760a0b1.diff
LOG: [ARM] Fix for MVE i128 vector icmp costs.
We were hitting an assert as the legalied type needn't be a vector.
Fixes #58364
(cherry picked from commit de6dfbbb300e552efa1cd86a023063a39d408b06)
Added:
Modified:
llvm/lib/Target/ARM/ARMTargetTransformInfo.cpp
llvm/test/Analysis/CostModel/ARM/mve-cmp.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/ARM/ARMTargetTransformInfo.cpp b/llvm/lib/Target/ARM/ARMTargetTransformInfo.cpp
index 3c102463ba080..cbfd2bc68f185 100644
--- a/llvm/lib/Target/ARM/ARMTargetTransformInfo.cpp
+++ b/llvm/lib/Target/ARM/ARMTargetTransformInfo.cpp
@@ -1036,7 +1036,7 @@ InstructionCost ARMTTIImpl::getCmpSelInstrCost(unsigned Opcode, Type *ValTy,
// split, we may need an expensive shuffle to get two in sync. This has the
// effect of making larger than legal compares (v8i32 for example)
// expensive.
- if (LT.second.getVectorNumElements() > 2) {
+ if (LT.second.isVector() && LT.second.getVectorNumElements() > 2) {
if (LT.first > 1)
return LT.first * BaseCost +
BaseT::getScalarizationOverhead(VecCondTy, true, false);
diff --git a/llvm/test/Analysis/CostModel/ARM/mve-cmp.ll b/llvm/test/Analysis/CostModel/ARM/mve-cmp.ll
index 17dd26cdc6cc7..bb517fa47d89a 100644
--- a/llvm/test/Analysis/CostModel/ARM/mve-cmp.ll
+++ b/llvm/test/Analysis/CostModel/ARM/mve-cmp.ll
@@ -22,6 +22,8 @@ define void @icmp() {
; CHECK-NEXT: Cost Model: Found an estimated cost of 36 for instruction: %v2i64 = icmp slt <2 x i64> undef, undef
; CHECK-NEXT: Cost Model: Found an estimated cost of 72 for instruction: %v4i64 = icmp slt <4 x i64> undef, undef
; CHECK-NEXT: Cost Model: Found an estimated cost of 144 for instruction: %v8i64 = icmp slt <8 x i64> undef, undef
+; CHECK-NEXT: Cost Model: Found an estimated cost of 68 for instruction: %v2i128 = icmp slt <2 x i128> undef, undef
+; CHECK-NEXT: Cost Model: Found an estimated cost of 136 for instruction: %v4i128 = icmp slt <4 x i128> undef, undef
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void
;
%v2i8 = icmp slt <2 x i8> undef, undef
@@ -44,6 +46,9 @@ define void @icmp() {
%v4i64 = icmp slt <4 x i64> undef, undef
%v8i64 = icmp slt <8 x i64> undef, undef
+ %v2i128 = icmp slt <2 x i128> undef, undef
+ %v4i128 = icmp slt <4 x i128> undef, undef
+
ret void
}
More information about the llvm-branch-commits
mailing list