llvm-c++-api相关内容

LLVM强制转换指令

我有要使用fadd添加的ConstantInt和ConstantFP值。但是,将ConstantInt转换为fadd可以接受的浮点数时遇到问题。 以下是代码的摘录: Value* left = ConstantInt::get(Type::getInt64Ty(getGlobalContext()), 12, true); Value* right = ConstantFP::get(Ty ..
发布时间:2022-03-21 21:52:38 C/C++开发

在llvm ir中将布尔向量转换为整数

我正在编写一个涉及向量运算的llvm-ir代码.我用'icmp'指令进行了整数向量比较,结果得到一个向量为的布尔向量,我的问题是我想将这8位转换为对应的整数值而无需遍历向量(向量),我尝试了“将bitcast转换为i8",这似乎将向量的第一位转换为i8,如果不正确,请更正我.有人可以建议我这样做吗. 定义i8 @main()#0 {入口:%A = alloca ..
发布时间:2021-05-30 19:39:15 其他开发

llvm-将参数传递给传递

我需要告诉通行证在文件中查找特定功能.我想指定要在旅途中寻找的功能,即运行通行证时.知道我该怎么做吗?这有点像理论上向函数传递参数. 解决方案 使用 cl :: opt 添加命令行选项,并在运行密码时进行设置. 或者,如果要使用clang从C或C ++生成IR,则可以使用 __ attribute((__ annotate __(("foo"))))来标记您感兴趣的 ..
发布时间:2021-05-30 19:39:01 其他开发

LLVM OPT没有提供优化的文件作为输出。

opt 的手册页中说:“它将LLVM源文件作为输入,对其运行指定的优化或分析,然后输出优化的文件或分析结果”。 我的目标:使用内置的优化过程 -dce 选择。此通行证消除死代码 我的源文件 foo.c : int foo(void) { int a = 24; int b = 25; / *分配给死变量-死代码* / int c; c = a * 4; 返回c ..
发布时间:2020-10-01 22:46:02 其他开发

llvm:如何获取基本块的标签

我写了一个遍历来检测和打印函数中基本块的标签,因为我想进一步使用splitBasicBlock().我这样写: virtual bool runOnModule(Module &M) { for(Module::iterator F = M.begin(), E = M.end(); F!= E; ++F) { errs() ..
发布时间:2020-07-08 08:33:42 其他开发

LLVM C ++ API到底是什么

我发现很难理解LLVM C ++ API. LLVM C ++ API和LLVM IR之间有什么关系?另外,如何使用LLVM C ++ API? 解决方案 为简化起见,LLVM是一个用于编写编译器的C ++库.它的C ++ API是该库的用户用来实现其编译器的外部接口. LLVM IR与LLVM C ++ API的一部分(用于构建IR的部分)之间存在一定程度的对称性. http:/ ..
发布时间:2020-06-29 20:56:37 其他开发

LLVM IR:如何在另一个.ll文件中调用函数

我正在编写LLVM IR代码,可以在另一个.ll文件中调用一个函数吗? 例如: 在一个.ll文件中,有一个函数foo();. 我可以在b.ll中使用此功能,就像调用foo一样吗?如果是这样,我如何添加a.ll 谢谢 解决方案 您需要在调用它的ll文件中添加函数foo的声明,然后像往常一样转换链接ll文件以生成可执行文件 llvm-link a.ll b.ll -o a. ..
发布时间:2020-05-02 11:05:30 其他开发

如何使用dbg元数据获取变量定义行号等?

据我所知,当我需要获取局部变量的行号时,我不得不寻找llvm.dbg.declare内在函数的调用并获取dbg元数据(因为AllocaInst本身不包含任何dbg信息).但是,似乎不能保证此CallInst是AllocaInst的下一条指令,并且我必须在指定的函数中遍历该指令,这效率很低.所以我想知道是否有AllocaInst直接获取llvm.dbg.declare指令的方法. 例如,在名为 ..
发布时间:2020-05-02 11:05:23 其他开发

LLVM中是否有带有命名参数的FunctionType?

在LLVM中,函数如下所示: define i32 @foo(i32, i32) 玩lli时,我注意到这也被接受: define i32 @foo(i32 %first-arg, i32 %second-arg) ,然后可以从给定名称访问参数. 我应该如何使用C ++ API生成具有命名参数的函数?我检查了文档,似乎没有办法为FunctionType::get提供名称,因 ..
发布时间:2020-05-02 11:04:45 其他开发

如何实现数组-LLVM

我正在使用llvm c ++ api编写一种玩具语言,并且正在尝试实现数组.我尝试了几种不同的方法,但都效果不佳. 这就是我要去的地方 可以类似于数组的类型(可以使用结构,向量或数组) 可以传递给函数并从中返回 可以具有无限嵌套的数组(例如[8 x [8 x [8 x [...]) 可以重新分配 数组都是相同的类型 数组在创建时指定了有限的长度. 理想情况下,它们会迅速 ..
发布时间:2020-05-02 11:04:37 其他开发

如何使用LLVM C ++ API进行类型检查?

我刚刚开始学习LLVM C ++ API,并且对如何进行类型检查感到有些困惑.我的讲师提供了一个有关将变量存储在堆栈存储器中的示例,如下所示: llvm::AllocaInst *Alloca; Alloca = llvm::Builder.CreateAlloca(llvm::IntegerType::get(getGlobalContext(), 32), nullptr, "varia ..
发布时间:2020-05-02 11:04:22 其他开发

填充LLVM CloneFunction VMAP

我想编写一些代码,给定LLVM函数F,该代码在同一模块中创建一个精确的副本(因此可以在以后保留原始副本的情况下操纵该副本).我想用CloneFunctionInto方法做到这一点. 我当前的尝试涉及尝试将每个(新arg,旧arg)对插入VMap.以前,我曾尝试插入未初始化的VMap,然后将其反过来放置.令人印象深刻的是,所有这三个都导致了完全相同的错误消息: 断言`VMap.count ..
发布时间:2020-05-02 11:03:52 其他开发

"Attributes.inc";文件未找到

我一直在使用include\llvm和include\llvm-c中提供的标头尝试创建自己的编译器.但是,每当我尝试编译时,都会出现此错误.我的文件中没有llvm/IR/Attributes.inc,也没有看到任何LLVM项目.我收到此错误: In file included from ./headers/llvm/IR/Function.h:26: In file included fro ..
发布时间:2020-05-02 11:03:01 其他开发

使用cmake将LLVM添加到项目

我正在尝试使用cygwin作为编译器将LLVM添加到cmake项目.我从cygwin的安装程序中下载了LLVM(只安装了所有与llvm相关的软件包).文件在那里,但是我不能在项目中包含LLVM.我尝试使用3.5.2(安装的版本)的官方指南,而我的CMakeLists.txt看起来像 cmake_minimum_required(VERSION 3.2) project(Lang) find ..
发布时间:2020-05-02 11:02:54 C/C++开发

如何调用未知类型的JITed LLVM函数?

我正在使用LLVM为JIT编译器实现前端.我首先从LLVM教程中的万花筒示例开始.我知道如何使用LLVM C ++ API生成和JIT LLVM IR.我也知道如何使用llvm :: ExecutionEngine的"getPointerToFunction"方法来调用JITed函数. getPointerToFunction返回一个void *,然后必须将其强制转换为正确的函数类型.例如, ..
发布时间:2020-05-02 11:01:47 其他开发

使用现代LLVM运行默认优化管道

我正在使用LLVM 7,我有一个llvm::Module,我想使用标准优化管道进行优化.不幸的是,我没有可以调用的llvm::runDefaultOptimizations函数.似乎有无数种方法可以优化LLVM中的模块.我在此主题上进行的搜索发现了许多旧的/折旧的API,以及一些无法在我的系统上运行的示例. 我希望在-O3上运行所有标准优化,并尽可能减少麻烦.我不想手动列出所有过程,甚至不想 ..
发布时间:2020-05-02 11:01:43 C/C++开发