llvm指令中的错误::getOpcode()和getOpcodeName
我发现我的llvm pass项目中可能有一些错误。我编写了一个小程序,试图打印出所有指令及其相应的操作码。我使用指令::getOpcode和指令::getOpcodeName 但结果看起来有点奇怪。以下是我的结果: 我试图一条接一条地打印出每条指令的操作码名,但每条指令都有一个错误的操作码名。我还检查了每个操作码名的操作码,它们也是错误的。我不知道在哪里可以找到指令列表的枚举,但我想我以前从未找到过它,错误的操作码名与操作码相关。看起来他们两个都从右边移动了2个单位 你曾经面对过这样的问题吗 我还附上我的llvm通行证代码,如下所示:llvm指令中的错误::getOpcode()和getOpcodeName,llvm,Llvm,我发现我的llvm pass项目中可能有一些错误。我编写了一个小程序,试图打印出所有指令及其相应的操作码。我使用指令::getOpcode和指令::getOpcodeName 但结果看起来有点奇怪。以下是我的结果: 我试图一条接一条地打印出每条指令的操作码名,但每条指令都有一个错误的操作码名。我还检查了每个操作码名的操作码,它们也是错误的。我不知道在哪里可以找到指令列表的枚举,但我想我以前从未找到过它,错误的操作码名与操作码相关。看起来他们两个都从右边移动了2个单位 你曾经面对过这样的问题吗 我
#include "llvm/ADT/Statistic.h"
#include "llvm/IR/Function.h"
#include "llvm/Pass.h"
#include "llvm/Support/raw_ostream.h"
#include "llvmFaultInjector.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/BasicBlock.h"
#include <iostream>
#include <cstdlib>
using namespace llvm;
namespace {
// Hello - The first implementation, without getAnalysisUsage.
struct Hello : public ModulePass {
static char ID; // Pass identification, replacement for typeid
Hello() : ModulePass(ID) {}
bool runOnModule(Module &M) override {
Module::iterator fi, fie;
Function::iterator bi, bie;
BasicBlock::iterator ii, iie;
/* test a example : delete first instruction of test file */
Instruction * inst;
for(fi = M.begin(), fie = M.end(); fi != fie; fi++)
{
for(bi = fi->begin(), bie = fi->end(); bi != bie; bi++)
{
for(ii = bi->begin(), iie = bi->end(); ii != iie; ii++)
{
inst = (Instruction *)(ii);
errs() << *inst << '\n';
errs() << inst->getOpcodeName() << '\n';
}
}
}
/* delete instruction*/
/*llvmFaultInjector::tranBranchDelete(inst);
*/
return true;
}
};
}
char Hello::ID = 0;
static RegisterPass<Hello> X("CFCFaultInject", "llvm CFCFaultInjector");
这太奇怪了。您使用的是什么版本的llvm,以及您是如何构建它的?事实上,我不确定我的版本号。我所做的只是按照中的教程。我想我已经做到了每一步。很奇怪。
#include "llvm/ADT/Statistic.h"
#include "llvm/IR/Function.h"
#include "llvm/Pass.h"
#include "llvm/Support/raw_ostream.h"
#include "llvmFaultInjector.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/BasicBlock.h"
#include <iostream>
#include <cstdlib>
using namespace llvm;
namespace {
// Hello - The first implementation, without getAnalysisUsage.
struct Hello : public ModulePass {
static char ID; // Pass identification, replacement for typeid
Hello() : ModulePass(ID) {}
bool runOnModule(Module &M) override {
Module::iterator fi, fie;
Function::iterator bi, bie;
BasicBlock::iterator ii, iie;
/* test a example : delete first instruction of test file */
Instruction * inst;
for(fi = M.begin(), fie = M.end(); fi != fie; fi++)
{
for(bi = fi->begin(), bie = fi->end(); bi != bie; bi++)
{
for(ii = bi->begin(), iie = bi->end(); ii != iie; ii++)
{
inst = (Instruction *)(ii);
errs() << *inst << '\n';
errs() << inst->getOpcodeName() << '\n';
}
}
}
/* delete instruction*/
/*llvmFaultInjector::tranBranchDelete(inst);
*/
return true;
}
};
}
char Hello::ID = 0;
static RegisterPass<Hello> X("CFCFaultInject", "llvm CFCFaultInjector");