小编Min*_*Gao的帖子

LLVM获取指令的操作数和左值名称

对于LLVM IR指令,%cmp7 = icmp eq i32 %6 %7我希望得到所有三个寄存器/符号名称(即%cmp %6 and %7)

现在我可以%cmp通过命令获取字符串,pi->getName()其中pi是指令指针.但是当我尝试获取操作名称时,我通过键入获得了空字符串pi->getOperand(0)->getName().

我试图isa<Instruction>(pi->getOperand(0))检查这是否是一个指令,它返回true但pi->getOperand(0)->hasName()返回false.事情让我感到奇怪的是,为什么这两个pipi->getOperand(0)的指示,但仅pi具有名?

有没有想法我可以使用API 获取操作数名称(字符串%6%7此处)?

我正在使用的LLVM版本是3.4.2

llvm llvm-ir llvm-c++-api

5
推荐指数
1
解决办法
2453
查看次数

LLVM插入从另一个文件定义的函数调用

我想在某个指令之前插入一个函数,但函数调用是在另一个文件中定义的.我试过了

IRBuilder<> Builder(pi);
CallInst *callOne = Builder.CreateCall(func_ins, "foo");
Run Code Online (Sandbox Code Playgroud)

这里func_insfunc*(or Value* to be more general)foo是调用函数的变量名称前缀我被分配.由于这个函数是在另一个文件中定义的,我不知道指针func_ins应该指向哪里,所以我只是将它设置为NULL但它不起作用.

谁能给我一些关于如何解决这个问题的提示?

还有一个问题是我可以使用WriteBitcodeToFile转储具有外部函数调用文件的已检测代码,因为我想知道它可能会报告Referencing function in another module还是Broken Module在执行模块检查时?

llvm llvm-ir

3
推荐指数
1
解决办法
1668
查看次数

在函数传递中访问循环信息的 LLVM 错误

我试图通过编写函数传递从 IR 获取循环信息。所以我按照一些例子写了如下。我对写通行证和通行证管理器不是很熟悉。

#include <iostream>
#include "llvm/LLVMContext.h"
#include "llvm/Module.h"
#include "llvm/Function.h"
#include "llvm/BasicBlock.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Support/IRReader.h"
#include "llvm/Support/SourceMgr.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/LoopPass.h"
#include "llvm/Pass.h"
#include "llvm/PassManager.h"

using namespace llvm;

namespace {
    class DetectLoop: public FunctionPass {
    public:
        DetectLoop() : FunctionPass(ID) {}

        static char ID;

        virtual void getAnalysisUsage(AnalysisUsage &AU) const {
            AU.addRequired<LoopInfo>();//I'm not sure if it's correct here *****1*****
        }

        virtual bool runOnFunction(Function &F) {
            if (!F.isDeclaration())
                LoopInfo &li = getAnalysis<LoopInfo>(F);//*****2*****
            for (Function::iterator I = F.begin(); I != …
Run Code Online (Sandbox Code Playgroud)

llvm llvm-ir llvm-c++-api

1
推荐指数
1
解决办法
1813
查看次数

访问C库函数调用的LLVM IR

我有一个C代码(例如,称为ac),它调用我们这样的函数printf,textcolorgotoxy从stdio.h/curses.h 调用.用于ac的LLVM-IR将仅声明这些函数并显示已调用这些函数意味着它不具有用于在a.ll中实现这些函数的详细IR.有没有什么方法可以访问这些IR或将所有实现(这些函数调用的a.c + IR的IR)放在一个.ll文件中?我不太了解LLVM,所以如果我犯了一些概念错误,请告诉我.

llvm clang llvm-ir

1
推荐指数
1
解决办法
896
查看次数

标签 统计

llvm ×4

llvm-ir ×4

llvm-c++-api ×2

clang ×1