[PATCH] D90597: [CostModel] Make target intrinsics cheap by default
Dave Green via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 3 01:58:47 PST 2020
This revision was automatically updated to reflect the committed changes.
Closed by commit rG90131e3ecb75: [CostModel] Make target intrinsics cheap by default (authored by dmgreen).
Changed prior to commit:
https://reviews.llvm.org/D90597?vs=302274&id=302512#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D90597/new/
https://reviews.llvm.org/D90597
Files:
llvm/include/llvm/CodeGen/BasicTTIImpl.h
llvm/include/llvm/IR/Function.h
llvm/lib/IR/Function.cpp
llvm/test/Analysis/CostModel/ARM/target-intrinsics.ll
Index: llvm/test/Analysis/CostModel/ARM/target-intrinsics.ll
===================================================================
--- llvm/test/Analysis/CostModel/ARM/target-intrinsics.ll
+++ llvm/test/Analysis/CostModel/ARM/target-intrinsics.ll
@@ -9,7 +9,7 @@
; CHECK-THUMB2-RECIP-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %t1 = call i32 @llvm.arm.ssat(i32 undef, i32 undef)
; CHECK-THUMB2-RECIP-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %t2 = tail call { <8 x half>, <8 x half> } @llvm.arm.mve.vld2q.v8f16.p0f16(half* undef)
; CHECK-THUMB2-RECIP-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %t3 = call { i32, i32 } @llvm.arm.mve.sqrshrl(i32 undef, i32 undef, i32 undef, i32 48)
-; CHECK-THUMB2-RECIP-NEXT: Cost Model: Found an estimated cost of 135 for instruction: %t4 = tail call { i32, i32 } @llvm.arm.mve.vmlldava.v8i16(i32 0, i32 0, i32 0, i32 0, i32 0, <8 x i16> undef, <8 x i16> undef)
+; CHECK-THUMB2-RECIP-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %t4 = tail call { i32, i32 } @llvm.arm.mve.vmlldava.v8i16(i32 0, i32 0, i32 0, i32 0, i32 0, <8 x i16> undef, <8 x i16> undef)
; CHECK-THUMB2-RECIP-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void
;
; CHECK-THUMB2-LAT-LABEL: 'intrinsics'
Index: llvm/lib/IR/Function.cpp
===================================================================
--- llvm/lib/IR/Function.cpp
+++ llvm/lib/IR/Function.cpp
@@ -640,8 +640,12 @@
#include "llvm/IR/IntrinsicImpl.inc"
#undef GET_INTRINSIC_TARGET_DATA
+bool Function::isTargetIntrinsic(Intrinsic::ID IID) {
+ return IID > TargetInfos[0].Count;
+}
+
bool Function::isTargetIntrinsic() const {
- return IntID > TargetInfos[0].Count;
+ return isTargetIntrinsic(IntID);
}
/// Find the segment of \c IntrinsicNameTable for intrinsics with the same
Index: llvm/include/llvm/IR/Function.h
===================================================================
--- llvm/include/llvm/IR/Function.h
+++ llvm/include/llvm/IR/Function.h
@@ -199,6 +199,10 @@
/// returns Intrinsic::not_intrinsic!
bool isIntrinsic() const { return HasLLVMReservedName; }
+ /// isTargetIntrinsic - Returns true if IID is an intrinsic specific to a
+ /// certain target. If it is a generic intrinsic false is returned.
+ static bool isTargetIntrinsic(Intrinsic::ID IID);
+
/// isTargetIntrinsic - Returns true if this function is an intrinsic and the
/// intrinsic is specific to a certain target. If this is not an intrinsic
/// or a generic intrinsic, false is returned.
Index: llvm/include/llvm/CodeGen/BasicTTIImpl.h
===================================================================
--- llvm/include/llvm/CodeGen/BasicTTIImpl.h
+++ llvm/include/llvm/CodeGen/BasicTTIImpl.h
@@ -1135,6 +1135,11 @@
if (BaseT::getIntrinsicInstrCost(ICA, CostKind) == 0)
return 0;
+ // Assume that target intrinsics are cheap.
+ Intrinsic::ID IID = ICA.getID();
+ if (Function::isTargetIntrinsic(IID))
+ return TargetTransformInfo::TCC_Basic;
+
if (ICA.isTypeBasedOnly())
return getTypeBasedIntrinsicInstrCost(ICA, CostKind);
@@ -1151,7 +1156,6 @@
const IntrinsicInst *I = ICA.getInst();
const SmallVectorImpl<const Value *> &Args = ICA.getArgs();
FastMathFlags FMF = ICA.getFlags();
- Intrinsic::ID IID = ICA.getID();
switch (IID) {
default:
// FIXME: all cost kinds should default to the same thing?
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D90597.302512.patch
Type: text/x-patch
Size: 3476 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201103/2d823d6f/attachment.bin>
More information about the llvm-commits
mailing list