llvm指令中的错误::getOpcode()和getOpcodeName

llvm指令中的错误::getOpcode()和getOpcodeName,llvm,Llvm,我发现我的llvm pass项目中可能有一些错误。我编写了一个小程序,试图打印出所有指令及其相应的操作码。我使用指令::getOpcode和指令::getOpcodeName 但结果看起来有点奇怪。以下是我的结果: 我试图一条接一条地打印出每条指令的操作码名,但每条指令都有一个错误的操作码名。我还检查了每个操作码名的操作码,它们也是错误的。我不知道在哪里可以找到指令列表的枚举,但我想我以前从未找到过它,错误的操作码名与操作码相关。看起来他们两个都从右边移动了2个单位 你曾经面对过这样的问题吗 我

我发现我的llvm pass项目中可能有一些错误。我编写了一个小程序,试图打印出所有指令及其相应的操作码。我使用指令::getOpcode和指令::getOpcodeName

但结果看起来有点奇怪。以下是我的结果: 我试图一条接一条地打印出每条指令的操作码名,但每条指令都有一个错误的操作码名。我还检查了每个操作码名的操作码,它们也是错误的。我不知道在哪里可以找到指令列表的枚举,但我想我以前从未找到过它,错误的操作码名与操作码相关。看起来他们两个都从右边移动了2个单位

你曾经面对过这样的问题吗

我还附上我的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");

这太奇怪了。您使用的是什么版本的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");