问题标签 [llvm-c++-api]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 设计 API 以接受通用输出流作为参数
我正在使用 LLVM 库设计一个 API,该库将接受输出流作为其构造函数参数之一。LLVM 编码标准规定以下内容:
使用 raw_ostream
LLVM 在 llvm/Support/raw_ostream.h 中包含一个轻量级、简单且高效的流实现,它提供了 std::ostream 的所有通用特性。所有新代码都应使用 raw_ostream 而不是 ostream。
与 std::ostream 不同,raw_ostream 不是模板,可以前向声明为类 raw_ostream。公共标头通常不应包含 raw_ostream 标头,而是使用前向声明和对 raw_ostream 实例的常量引用。
我必须遵守 LLVM 编码标准,因此我尝试在构造函数中接受 raw_ostream 作为参数。我尝试通过引用和指针传递 raw_ostream,但在编译时收到以下错误消息:
注意:候选构造函数不可行:没有从 'llvm::raw_ostream &()' 到 'llvm::raw_ostream &' 的已知转换...
我的构造函数应该是什么样子才能接受“llvm::raw_ostream &()”类型的参数?我想为此输出流初始化一个类成员。
这是我当前的代码:
构造函数
呼叫者
outs
记录在此链接的第 665 行
llvm - LLVM IR getelementptr LLVM C API 等效项
我正在尝试编写 LLVM C API 代码来生成 LLVM 汇编代码来计算字符串中的字符数。我需要知道如何在 LLVM C API 中的 LLVM IR 等效项中编写 getelementptr。我已经查看了整个谷歌,似乎无法找到答案。任何帮助或提示将不胜感激。先感谢您。
llvm - 如何在 LLVM 中插入/删除边缘?
我可以通过更改其目标来插入一条新边,并通过其源和目标删除另一条边。换句话说,我可以用另一条边替换一条边的基本块目标,以在 CFG 中进行一些修改吗?
我尝试getEdge()
了函数 in ProfileInfo
,但它不起作用:
llvm - 带有数组参数的 LLVM IR 函数
我想从两个基本的 c++ 函数生成 LLVM IR 代码,如下所示。
我的问题是使用 LLVM API 获取数组参数的索引。有任何想法吗 ?太感谢了
已编辑
这是我使用 API 的代码:
这是生成的 LLVM IR:
由于数组访问,我被困在 newFun 的主体上。
llvm - 如何在 X86 AT&T-Style Assembly Printer pass 之前添加我的 pass?
如何在 X86 AT&T-Style Assembly Printer pass 之前添加我的 pass?我需要更改 MachineFunction 并将更改保存到 asm 文件。问题是我的通行证毕竟被触发了。
通过调试:
0x202a430 释放函数“InterlockedBitTestAndSet”上的“执行依赖性修复”... 0x202a430 正在函数“InterlockedBitTestAndSet”上执行“X86 AT&T 样式装配打印机”... 0x2094f80 所需分析:未初始化的通过、机器模块信息、创建垃圾收集器模块元数据
-*- 'X86 AT&T-Style Assembly Printer' 是以下通行证实例的最后一个用户。释放这些实例 0x202a430 释放函数“InterlockedBitTestAndSet”上的“X86 AT&T-Style Assembly Printer”... 0x202a430 正在函数“InterlockedBitTestAndSet”上执行“删除垃圾收集器信息”... 0x2095268 所需分析:创建垃圾收集器模块元数据
-*- 'Delete Garbage Collector Information' 是以下通行证实例的最后一个用户。释放这些实例 0x202a430 释放函数“InterlockedBitTestAndSet”上的“删除垃圾收集器信息”... 0x202a430 正在函数“InterlockedBitTestAndSet”上执行“简单寄存器分配器”... 0x20955b8 所需分析:未初始化的通过
llvm - 使用 llvm-clang 编写完整的分析
作为研究思路的一部分,我需要完成以下任务:
1. 解析手头的 C 文件以获取 llvm-IR。
2. 对 IR 进行分析。可能添加和删除一些指令或 BB
3. 发出 x86 可执行文件或 C(需要稍后决定)
我认为这对于任何一个编写 C 分析的人来说都是很常见的任务,我想用 C/C++ 完成所有这些任务(因为我们的大部分研究代码都是用 C/C++ 编写的)。我用谷歌搜索了很多,虽然任务 2 和 3 有很多文档可用,但任务 1 可用的文档较少,任何关于此的想法都会非常有帮助。
我想将这些任务作为管道挂钩,也欢迎对此提出任何建议。
-谢谢
llvm - LLVM。如何根据名称访问结构字段?
我在 C++ 中有很少的示例代码:
和 LLVM 3.4 IR:
和一个非常简单的问题:如何访问RecordTest
字段(当我解析 .cpp 时),没有它们的索引,只有名称(value1
和value2
)?
我只知道一种方式(来自llc -march=cpp
) - 使用索引:
那么,如果我不知道字段的索引(const_int32_5
以及const_int32_6
上面的代码),我可以从 C++ 转换为 LLVM IR 吗?
UPD==================================
因此,我们无法访问字段名称。如果我们需要它(如果我们解析 .cpp,我们确实需要它),我们可以编写如下内容:
这是正确的吗 ?
c++ - 使用 c++ api 将 c++ 回调函数转换为 llvm
我想使用 c++ api 将 ac 回调函数转换为 llvm 函数。我的示例 C++ 函数如下所示。
基本上我想将bindMe函数的参数(ac回调函数)转换为相应的llvm函数。使用 API 可以实现这样的事情吗?
我真的很感激任何想法。
谢谢
llvm - 使用“LoopInfo::getLoopFor”时如何修复未定义的符号?
我正在尝试编写一个通过每个基本块的通道,并且我想确定每个基本块是否处于循环中。
我添加LoopInfo
为必需的分析:
然后调用getLoopFor
:
但我收到以下错误:
/home/mypass/llvm/Debug+Asserts/bin/opt:符号查找错误:/home/mypass/llvm/Debug+Asserts/lib/ReadIR.so:未定义符号:_ZNK4llvm12LoopInfoBaseINS_10BasicBlockENS_4LoopEE10getLoopForEPKS1_
我该如何解决?或者有没有其他方法可以识别基本块的循环?
llvm-c++-api - Print x86 assembly instead of getting machine code from ExecutionEngine
I've seen several conflicting descriptions of how to do this around the google results, and haven't been able to get any of them to work.
My problem is basically this: where I call ExecutionEngine::getPointerToFunction (with an llvm::Function*), I'd like to instead get the pretty-printed x86 assembly that would be produced for this function.
Anybody?
[ETA: I'm using LLVM 3.3. The descriptions I've found seem to be for earlier versions of LLVM.]