gpt4 book ai didi

llvm - 计算函数中 LLVM 指令的数量

转载 作者:行者123 更新时间:2023-12-03 10:13:19 27 4
gpt4 key购买 nike

我一直在用

opt -stats -analyze -instcount file.bc

获取代码的统计信息。现在我想在一个特定名称的函数中获取 LLVM 指令的数量,比如“bar”。

理想情况下,我希望有一个 opt 选项,它会以这种方式工作

opt -stats -analyze -instcount   funcname="bar"

什么是正确的选择?我google了很多,还没有得到答案。

最佳答案

创建一个 function analysis pass . ( llvm::FunctionPass documentation )

你的代码看起来像这样:

// This is a contrived example.

#include <iterator>
#include <string>

#include "llvm/Pass.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/Instruction.h"
#include "llvm/Support/raw_ostream.h"

namespace
{

using namespace llvm;

cl::opt<std::string> functionName("funcname", cl::ValueRequired,
cl::desc("Function name"), cl::NotHidden);

class FunctionInstCounter : public FunctionPass
{
public:
static char ID;

FunctionInstCounter()
: FunctionPass(ID)
{
initializeFunctionInstCounterPass(*PassRegistry::getPassRegistry());
}

bool runOnFunction(Function& func) override
{
if (func.getName() != functionName)
{
return false;
}

unsigned int instCount = 0;
for (BasicBlock& bb : func)
{
instCount += std::distance(bb.begin(), bb.end());
}

llvm::outs() << "Number of instructions in " << func.getName() << ": "
<< instCount << "\n";
return false;
}
};

} // namespace

char FunctionInstCounter::ID = 0;

INITIALIZE_PASS(FunctionInstCounter, "funcinstcount",
"Function instruction counter", false, true)

llvm::Pass* llvm::createFunctionInstCounterPass()
{
return new FunctionInstCounter();
}

你可以这样调用它:

opt -funcinstcount -funcname=NameOfFunctionHere

关于llvm - 计算函数中 LLVM 指令的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47210763/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com