Skip to content

Commit 5239f67

Browse files
authored
[CostModel][Test] Replace multiple flags with -intrinsic-cost-strategy (#128885)
This replaces the `-prefer-intrinsic-cost` and `type-based-intrinsic-cost` flags with a single `-intrinsic-cost-strategy=<strategy>` flag. The possible strategies are: * `instruction-cost` - Use TargetTransformInfo::getInstructionCost() * `intrinsic-cost` - Use TargetTransformInfo::getIntrinsicInstrCost() * `type-based-intrinsic-cost` - Calculate the intrinsic cost based only on argument types
1 parent bd3bde8 commit 5239f67

File tree

8 files changed

+31
-18
lines changed

8 files changed

+31
-18
lines changed

llvm/lib/Analysis/CostModel.cpp

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,25 @@ static cl::opt<TargetTransformInfo::TargetCostKind> CostKind(
4040
clEnumValN(TargetTransformInfo::TCK_SizeAndLatency,
4141
"size-latency", "Code size and latency")));
4242

43-
static cl::opt<bool> TypeBasedIntrinsicCost("type-based-intrinsic-cost",
44-
cl::desc("Calculate intrinsics cost based only on argument types"),
45-
cl::init(false));
43+
enum class IntrinsicCostStrategy {
44+
InstructionCost,
45+
IntrinsicCost,
46+
TypeBasedIntrinsicCost,
47+
};
4648

47-
static cl::opt<bool> PreferIntrinsicCost(
48-
"prefer-intrinsic-cost",
49-
cl::desc("Prefer using getIntrinsicInstrCost over getInstructionCost"),
50-
cl::init(false));
49+
static cl::opt<IntrinsicCostStrategy> IntrinsicCost(
50+
"intrinsic-cost-strategy",
51+
cl::desc("Costing strategy for intrinsic instructions"),
52+
cl::init(IntrinsicCostStrategy::InstructionCost),
53+
cl::values(
54+
clEnumValN(IntrinsicCostStrategy::InstructionCost, "instruction-cost",
55+
"Use TargetTransformInfo::getInstructionCost"),
56+
clEnumValN(IntrinsicCostStrategy::IntrinsicCost, "intrinsic-cost",
57+
"Use TargetTransformInfo::getIntrinsicInstrCost"),
58+
clEnumValN(
59+
IntrinsicCostStrategy::TypeBasedIntrinsicCost,
60+
"type-based-intrinsic-cost",
61+
"Calculate the intrinsic cost based only on argument types")));
5162

5263
#define CM_NAME "cost-model"
5364
#define DEBUG_TYPE CM_NAME
@@ -63,10 +74,12 @@ PreservedAnalyses CostModelPrinterPass::run(Function &F,
6374
// which cost kind to print.
6475
InstructionCost Cost;
6576
auto *II = dyn_cast<IntrinsicInst>(&Inst);
66-
if (II && (PreferIntrinsicCost || TypeBasedIntrinsicCost)) {
77+
if (II && IntrinsicCost != IntrinsicCostStrategy::InstructionCost) {
6778
IntrinsicCostAttributes ICA(
6879
II->getIntrinsicID(), *II, InstructionCost::getInvalid(),
69-
/*TypeBasedOnly=*/TypeBasedIntrinsicCost, &TLI);
80+
/*TypeBasedOnly=*/IntrinsicCost ==
81+
IntrinsicCostStrategy::TypeBasedIntrinsicCost,
82+
&TLI);
7083
Cost = TTI.getIntrinsicInstrCost(ICA, CostKind);
7184
} else {
7285
Cost = TTI.getInstructionCost(&Inst, CostKind);

llvm/test/Analysis/CostModel/AArch64/sincos.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --filter "sincos"
22
; RUN: opt < %s -mtriple=aarch64-gnu-linux -mattr=+neon,+sve -passes="print<cost-model>" -cost-kind=throughput 2>&1 -disable-output | FileCheck %s
3-
; RUN: opt < %s -mtriple=aarch64-gnu-linux -mattr=+neon,+sve -vector-library=ArmPL -passes="print<cost-model>" -prefer-intrinsic-cost -cost-kind=throughput 2>&1 -disable-output | FileCheck %s -check-prefix=CHECK-VECLIB
3+
; RUN: opt < %s -mtriple=aarch64-gnu-linux -mattr=+neon,+sve -vector-library=ArmPL -passes="print<cost-model>" -intrinsic-cost-strategy=intrinsic-cost -cost-kind=throughput 2>&1 -disable-output | FileCheck %s -check-prefix=CHECK-VECLIB
44

55
define void @sincos() {
66
; CHECK-LABEL: 'sincos'

llvm/test/Analysis/CostModel/AArch64/sve-intrinsics.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
22
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -S -mtriple=aarch64--linux-gnu -mattr=+sve | FileCheck %s --check-prefix=CHECK-VSCALE-1
33
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -mcpu=neoverse-v1 -disable-output -S -mtriple=aarch64--linux-gnu -mattr=+sve | FileCheck %s --check-prefix=CHECK-VSCALE-2
4-
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -type-based-intrinsic-cost -disable-output -S -mtriple=aarch64--linux-gnu -mattr=+sve | FileCheck %s --check-prefix=TYPE_BASED_ONLY
4+
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -intrinsic-cost-strategy=type-based-intrinsic-cost -disable-output -S -mtriple=aarch64--linux-gnu -mattr=+sve | FileCheck %s --check-prefix=TYPE_BASED_ONLY
55

66
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
77

llvm/test/Analysis/CostModel/RISCV/cast.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
2-
; RUN: opt < %s -mtriple=riscv32 -mattr=+v,+zfh,+zvfh -passes="print<cost-model>" -cost-kind=throughput --type-based-intrinsic-cost=true 2>&1 -disable-output | FileCheck %s --check-prefixes=CHECK,RV32
3-
; RUN: opt < %s -mtriple=riscv64 -mattr=+v,+zfh,+zvfh -passes="print<cost-model>" -cost-kind=throughput --type-based-intrinsic-cost=true 2>&1 -disable-output | FileCheck %s --check-prefixes=CHECK,RV64
2+
; RUN: opt < %s -mtriple=riscv32 -mattr=+v,+zfh,+zvfh -passes="print<cost-model>" -cost-kind=throughput -intrinsic-cost-strategy=type-based-intrinsic-cost 2>&1 -disable-output | FileCheck %s --check-prefixes=CHECK,RV32
3+
; RUN: opt < %s -mtriple=riscv64 -mattr=+v,+zfh,+zvfh -passes="print<cost-model>" -cost-kind=throughput -intrinsic-cost-strategy=type-based-intrinsic-cost 2>&1 -disable-output | FileCheck %s --check-prefixes=CHECK,RV64
44

55
define void @sext() {
66
; RV32-LABEL: 'sext'

llvm/test/Analysis/CostModel/RISCV/cmp.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 5
2-
; RUN: opt < %s -mtriple=riscv32 -mattr=+v,+f -passes="print<cost-model>" -cost-kind=throughput --type-based-intrinsic-cost=true 2>&1 -disable-output | FileCheck %s --check-prefixes=CHECK,RV32
3-
; RUN: opt < %s -mtriple=riscv64 -mattr=+v,+f -passes="print<cost-model>" -cost-kind=throughput --type-based-intrinsic-cost=true 2>&1 -disable-output | FileCheck %s --check-prefixes=CHECK,RV64
2+
; RUN: opt < %s -mtriple=riscv32 -mattr=+v,+f -passes="print<cost-model>" -cost-kind=throughput -intrinsic-cost-strategy=type-based-intrinsic-cost 2>&1 -disable-output | FileCheck %s --check-prefixes=CHECK,RV32
3+
; RUN: opt < %s -mtriple=riscv64 -mattr=+v,+f -passes="print<cost-model>" -cost-kind=throughput -intrinsic-cost-strategy=type-based-intrinsic-cost 2>&1 -disable-output | FileCheck %s --check-prefixes=CHECK,RV64
44

55
define void @icmp() {
66
; RV32-LABEL: 'icmp'

llvm/test/Analysis/CostModel/RISCV/rvv-expandload-compressstore.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
22
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -S -mtriple=riscv64 -mattr=+v,+zvfhmin,+zvfbfmin | FileCheck %s
3-
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -S -mtriple=riscv64 -mattr=+v,+zvfhmin,+zvfbfmin --type-based-intrinsic-cost=true | FileCheck %s --check-prefixes=TYPEBASED
3+
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -S -mtriple=riscv64 -mattr=+v,+zvfhmin,+zvfbfmin -intrinsic-cost-strategy=type-based-intrinsic-cost | FileCheck %s --check-prefixes=TYPEBASED
44

55
define void @expand_load() {
66
; CHECK-LABEL: 'expand_load'

llvm/test/Analysis/CostModel/RISCV/rvv-select.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
22
; RUN: opt -passes="print<cost-model>" 2>&1 -disable-output -mtriple=riscv64 -mattr=+v,+f,+d,+zfh,+zvfh -riscv-v-fixed-length-vector-lmul-max=1 < %s | FileCheck %s
3-
; RUN: opt -passes="print<cost-model>" 2>&1 -disable-output -mtriple=riscv64 -mattr=+v,+f,+d,+zfh,+zvfh -riscv-v-fixed-length-vector-lmul-max=1 --type-based-intrinsic-cost=true < %s | FileCheck %s
3+
; RUN: opt -passes="print<cost-model>" 2>&1 -disable-output -mtriple=riscv64 -mattr=+v,+f,+d,+zfh,+zvfh -riscv-v-fixed-length-vector-lmul-max=1 -intrinsic-cost-strategy=type-based-intrinsic-cost < %s | FileCheck %s
44
; Check that we don't crash querying costs when vectors are not enabled.
55
; RUN: opt -passes="print<cost-model>" 2>&1 -disable-output -mtriple=riscv64
66

llvm/test/Analysis/CostModel/RISCV/vp-intrinsics.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
22
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -S -mtriple=riscv64 -mattr=+v,+zvfhmin,+zvfbfmin | FileCheck %s --check-prefixes=CHECK,ARGBASED
3-
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -S -mtriple=riscv64 -mattr=+v,+zvfhmin,+zvfbfmin --type-based-intrinsic-cost=true | FileCheck %s --check-prefixes=CHECK,TYPEBASED
3+
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -S -mtriple=riscv64 -mattr=+v,+zvfhmin,+zvfbfmin -intrinsic-cost-strategy=type-based-intrinsic-cost | FileCheck %s --check-prefixes=CHECK,TYPEBASED
44

55
define void @unsupported_fp_ops(<vscale x 4 x float> %vec, i32 %extraarg) {
66
; CHECK-LABEL: 'unsupported_fp_ops'

0 commit comments

Comments
 (0)