From 19dfeb09a728372449c95dc1876ec77fbb7e0340 Mon Sep 17 00:00:00 2001 From: Xinliang David Li Date: Tue, 20 Sep 2016 19:07:22 +0000 Subject: [PATCH] [Profile] code refactoring: make getStep a method in base class git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282002 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/IR/IntrinsicInst.h | 2 +- lib/IR/IntrinsicInst.cpp | 10 ++++++++++ lib/Transforms/Instrumentation/InstrProfiling.cpp | 10 +--------- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/include/llvm/IR/IntrinsicInst.h b/include/llvm/IR/IntrinsicInst.h index 57e1633a509..f797457dc42 100644 --- a/include/llvm/IR/IntrinsicInst.h +++ b/include/llvm/IR/IntrinsicInst.h @@ -359,6 +359,7 @@ namespace llvm { ConstantInt *getIndex() const { return cast(const_cast(getArgOperand(3))); } + Value *getStep() const; }; class InstrProfIncrementInstStep : public InstrProfIncrementInst { @@ -369,7 +370,6 @@ namespace llvm { static inline bool classof(const Value *V) { return isa(V) && classof(cast(V)); } - Value *getStep() const { return const_cast(getArgOperand(4)); } }; /// This represents the llvm.instrprof_value_profile intrinsic. diff --git a/lib/IR/IntrinsicInst.cpp b/lib/IR/IntrinsicInst.cpp index 3f747117b72..240250662ae 100644 --- a/lib/IR/IntrinsicInst.cpp +++ b/lib/IR/IntrinsicInst.cpp @@ -25,6 +25,7 @@ #include "llvm/IR/Constants.h" #include "llvm/IR/GlobalVariable.h" #include "llvm/IR/Metadata.h" +#include "llvm/IR/Module.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; @@ -83,3 +84,12 @@ int llvm::Intrinsic::lookupLLVMIntrinsicByName(ArrayRef NameTable, return LastLow - NameTable.begin(); return -1; } + +Value *InstrProfIncrementInst::getStep() const { + if (InstrProfIncrementInstStep::classof(this)) { + return const_cast(getArgOperand(4)); + } + const Module *M = getModule(); + LLVMContext &Context = M->getContext(); + return ConstantInt::get(Type::getInt64Ty(Context), 1); +} diff --git a/lib/Transforms/Instrumentation/InstrProfiling.cpp b/lib/Transforms/Instrumentation/InstrProfiling.cpp index 4f71261a1ab..001468a0433 100644 --- a/lib/Transforms/Instrumentation/InstrProfiling.cpp +++ b/lib/Transforms/Instrumentation/InstrProfiling.cpp @@ -222,14 +222,6 @@ void InstrProfiling::lowerValueProfileInst(InstrProfValueProfileInst *Ind) { Ind->eraseFromParent(); } -static Value *getIncrementStep(InstrProfIncrementInst *Inc, - IRBuilder<> &Builder) { - auto *IncWithStep = dyn_cast(Inc); - if (IncWithStep) - return IncWithStep->getStep(); - return Builder.getInt64(1); -} - void InstrProfiling::lowerIncrement(InstrProfIncrementInst *Inc) { GlobalVariable *Counters = getOrCreateRegionCounters(Inc); @@ -237,7 +229,7 @@ void InstrProfiling::lowerIncrement(InstrProfIncrementInst *Inc) { uint64_t Index = Inc->getIndex()->getZExtValue(); Value *Addr = Builder.CreateConstInBoundsGEP2_64(Counters, 0, Index); Value *Count = Builder.CreateLoad(Addr, "pgocount"); - Count = Builder.CreateAdd(Count, getIncrementStep(Inc, Builder)); + Count = Builder.CreateAdd(Count, Inc->getStep()); Inc->replaceAllUsesWith(Builder.CreateStore(Count, Addr)); Inc->eraseFromParent(); } -- 2.50.1