[llvm] [nfc] Fix RTTI for `InstrProf` intrinsics (PR #83511)
Mircea Trofin via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 1 09:45:33 PST 2024
https://github.com/mtrofin updated https://github.com/llvm/llvm-project/pull/83511
>From 0c5604d0f2079cfbd77341a7481212b294de9830 Mon Sep 17 00:00:00 2001
From: Mircea Trofin <mtrofin at google.com>
Date: Thu, 29 Feb 2024 15:12:07 -0800
Subject: [PATCH] [pgo][nfc] Model `Count` as a `std::optional` in
`PGOUseBBInfo` (#83364)
Simpler code, compared to tracking state of 2 variables and the ambiguity of "0" CountValue (is it 0 or is it invalid?)
---
llvm/include/llvm/IR/IntrinsicInst.h | 37 ++++++++++++++++++++++++++--
1 file changed, 35 insertions(+), 2 deletions(-)
diff --git a/llvm/include/llvm/IR/IntrinsicInst.h b/llvm/include/llvm/IR/IntrinsicInst.h
index fbaaef8ea44315..c07b83a81a63e1 100644
--- a/llvm/include/llvm/IR/IntrinsicInst.h
+++ b/llvm/include/llvm/IR/IntrinsicInst.h
@@ -1429,7 +1429,35 @@ class VACopyInst : public IntrinsicInst {
/// A base class for all instrprof intrinsics.
class InstrProfInstBase : public IntrinsicInst {
+protected:
+ static bool isCounterBase(const IntrinsicInst &I) {
+ switch (I.getIntrinsicID()) {
+ case Intrinsic::instrprof_cover:
+ case Intrinsic::instrprof_increment:
+ case Intrinsic::instrprof_increment_step:
+ case Intrinsic::instrprof_timestamp:
+ case Intrinsic::instrprof_value_profile:
+ return true;
+ }
+ return false;
+ }
+ static bool isMCDCBitmapBase(const IntrinsicInst &I) {
+ switch (I.getIntrinsicID()) {
+ case Intrinsic::instrprof_mcdc_parameters:
+ case Intrinsic::instrprof_mcdc_tvbitmap_update:
+ return true;
+ }
+ return false;
+ }
+
public:
+ static bool classof(const Value *V) {
+ if (const auto *Instr = dyn_cast<IntrinsicInst>(V))
+ return isCounterBase(*Instr) || isMCDCBitmapBase(*Instr) ||
+ Instr->getIntrinsicID() ==
+ Intrinsic::instrprof_mcdc_condbitmap_update;
+ return false;
+ }
// The name of the instrumented function.
GlobalVariable *getName() const {
return cast<GlobalVariable>(
@@ -1444,6 +1472,12 @@ class InstrProfInstBase : public IntrinsicInst {
/// A base class for all instrprof counter intrinsics.
class InstrProfCntrInstBase : public InstrProfInstBase {
public:
+ static bool classof(const Value *V) {
+ if (const auto *Instr = dyn_cast<IntrinsicInst>(V))
+ return InstrProfInstBase::isCounterBase(*Instr);
+ return false;
+ }
+
// The number of counters for the instrumented function.
ConstantInt *getNumCounters() const;
// The index of the counter that this instruction acts on.
@@ -1524,8 +1558,7 @@ class InstrProfValueProfileInst : public InstrProfCntrInstBase {
class InstrProfMCDCBitmapInstBase : public InstrProfInstBase {
public:
static bool classof(const IntrinsicInst *I) {
- return I->getIntrinsicID() == Intrinsic::instrprof_mcdc_parameters ||
- I->getIntrinsicID() == Intrinsic::instrprof_mcdc_tvbitmap_update;
+ return InstrProfInstBase::isMCDCBitmapBase(*I);
}
static bool classof(const Value *V) {
return isa<IntrinsicInst>(V) && classof(cast<IntrinsicInst>(V));
More information about the llvm-commits
mailing list