[PATCH] D147613: [AArch64] Extend cost handling for fshl to also cover fshr.
Florian Hahn via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 5 06:53:30 PDT 2023
fhahn created this revision.
fhahn added reviewers: dmgreen, ab, t.p.northover, aemerson.
Herald added subscribers: StephenFan, hiraditya, kristof.beyls.
Herald added a project: All.
fhahn requested review of this revision.
Herald added a project: LLVM.
Depends on D147322 <https://reviews.llvm.org/D147322>.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D147613
Files:
llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
llvm/test/Analysis/CostModel/AArch64/fshr.ll
Index: llvm/test/Analysis/CostModel/AArch64/fshr.ll
===================================================================
--- llvm/test/Analysis/CostModel/AArch64/fshr.ll
+++ llvm/test/Analysis/CostModel/AArch64/fshr.ll
@@ -5,7 +5,7 @@
define i8 @fshr_i8_3rd_arg_const(i8 %a, i8 %b) {
; CHECK-LABEL: 'fshr_i8_3rd_arg_const'
-; CHECK-NEXT: Cost Model: Found an estimated cost of 6 for instruction: %fshr = tail call i8 @llvm.fshr.i8(i8 %a, i8 %b, i8 9)
+; CHECK-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %fshr = tail call i8 @llvm.fshr.i8(i8 %a, i8 %b, i8 9)
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret i8 %fshr
;
entry:
@@ -27,7 +27,7 @@
define i16 @fshr_i16(i16 %a, i16 %b) {
; CHECK-LABEL: 'fshr_i16'
-; CHECK-NEXT: Cost Model: Found an estimated cost of 6 for instruction: %fshr = tail call i16 @llvm.fshr.i16(i16 %a, i16 %b, i16 9)
+; CHECK-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %fshr = tail call i16 @llvm.fshr.i16(i16 %a, i16 %b, i16 9)
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret i16 %fshr
;
entry:
@@ -39,7 +39,7 @@
define i32 @fshr_i32_3rd_arg_const(i32 %a, i32 %b) {
; CHECK-LABEL: 'fshr_i32_3rd_arg_const'
-; CHECK-NEXT: Cost Model: Found an estimated cost of 6 for instruction: %fshr = tail call i32 @llvm.fshr.i32(i32 %a, i32 %b, i32 9)
+; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %fshr = tail call i32 @llvm.fshr.i32(i32 %a, i32 %b, i32 9)
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret i32 %fshr
;
entry:
@@ -61,7 +61,7 @@
define i64 @fshr_i64_3rd_arg_const(i64 %a, i64 %b) {
; CHECK-LABEL: 'fshr_i64_3rd_arg_const'
-; CHECK-NEXT: Cost Model: Found an estimated cost of 6 for instruction: %fshr = tail call i64 @llvm.fshr.i64(i64 %a, i64 %b, i64 9)
+; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %fshr = tail call i64 @llvm.fshr.i64(i64 %a, i64 %b, i64 9)
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret i64 %fshr
;
entry:
@@ -160,7 +160,7 @@
define <4 x i32> @fshr_v4i32_3rd_arg_vec_const_all_lanes_same(<4 x i32> %a, <4 x i32> %b) {
; CHECK-LABEL: 'fshr_v4i32_3rd_arg_vec_const_all_lanes_same'
-; CHECK-NEXT: Cost Model: Found an estimated cost of 6 for instruction: %fshr = tail call <4 x i32> @llvm.fshr.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 3, i32 3, i32 3, i32 3>)
+; CHECK-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %fshr = tail call <4 x i32> @llvm.fshr.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 3, i32 3, i32 3, i32 3>)
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %fshr
;
entry:
@@ -192,7 +192,7 @@
define <2 x i64> @fshr_v2i64_3rd_arg_vec_const_all_lanes_same(<2 x i64> %a, <2 x i64> %b) {
; CHECK-LABEL: 'fshr_v2i64_3rd_arg_vec_const_all_lanes_same'
-; CHECK-NEXT: Cost Model: Found an estimated cost of 6 for instruction: %fshr = tail call <2 x i64> @llvm.fshr.v2i64(<2 x i64> %a, <2 x i64> %b, <2 x i64> <i64 1, i64 1>)
+; CHECK-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %fshr = tail call <2 x i64> @llvm.fshr.v2i64(<2 x i64> %a, <2 x i64> %b, <2 x i64> <i64 1, i64 1>)
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %fshr
;
entry:
Index: llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
===================================================================
--- llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
+++ llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
@@ -523,12 +523,12 @@
}
break;
}
- case Intrinsic::fshl: {
+ case Intrinsic::fshl:
+ case Intrinsic::fshr: {
if (ICA.getArgs().empty())
break;
// TODO: Add handling for fshl where third argument is not a constant.
- // TODO: Also use for fshr.
const TTI::OperandValueInfo OpInfoZ = TTI::getOperandInfo(ICA.getArgs()[2]);
if (!OpInfoZ.isConstant())
break;
@@ -538,6 +538,8 @@
static const CostTblEntry FshlTbl[] = {
{Intrinsic::fshl, MVT::v4i32, 3}, // ushr + shl + orr
{Intrinsic::fshl, MVT::v2i64, 3},
+ {Intrinsic::fshr, MVT::v4i32, 3}, // ushr + shl + orr
+ {Intrinsic::fshr, MVT::v2i64, 3},
};
const auto *Entry =
CostTableLookup(FshlTbl, ICA.getID(), LegalisationCost.second);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D147613.511087.patch
Type: text/x-patch
Size: 4441 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230405/f35ee09f/attachment.bin>
More information about the llvm-commits
mailing list