llvm-ir

    4热度

    1回答

    我试图在LLVM中对标记联合(也称为总和类型)进行编码,并且在保持编译器前端平台不可知的情况下似乎不可能。想象一下,我有这个标签联合(拉斯特表示): enum T { C1(i32, i64), C2(i64) } 为了这个编码在LLVM我需要知道知道最大的变量的大小。这又要求我知道所有字段的对齐和大小。换句话说,我的前端需要 跟踪的大小和所有的东西排列, 创建一个虚拟结

    1热度

    1回答

    我正在使用LLVM框架编写一个简单的JIT编译器。 有一些不平凡的功能,所以它的代 变得非常复杂,因为它使用了几个动态库。 所以我的问题是以下几点: 是否有通过LLVM来加载LLVM IR源的方式::生成器/其它类 有没有办法告诉LLVM,在运行时一些动态库应该在执行之前... 第一个问题更加有趣,因为我已经知道如何要求C/C++应用程序的链接,所以我可以通过Clang生成LLVM IR代码,但它

    0热度

    1回答

    我有以下llvm ir,并花了一天的最佳时间尝试调试它,我似乎无法得到它的处理。当我在Windows机器上运行时,程序简单地在循环中冻结(with)segfault。 ; standard declaration etc %gen__list__0 = type { i8*, i64, i64 } %const_array_offset = type { i64, i64 } ; other

    2热度

    1回答

    让我们假设我们有这样的表达: %rem = srem i32 %i.0, 10 %mul = mul nsw i32 %rem, 2 %I.0是LLVM :: PHINode让我得到了界限。 问题是:有没有办法在编译时得到%mul的值?我在写一个llvm Pass,我需要评估一些使用%i.0的表达式。我正在寻找一个函数,类或其他的东西,我会给%i.0一个值,它会评估表达式并返回结果。

    3热度

    1回答

    我编写了一个代码,它可以通过创建值*来替代LLVM IR中的添加指令和子指令。我试图用%5 = sub i8 0, %4替换%inc = add i8 %2, 1。 我的问题是如何使更改显示在LLVM IR文件中?我可以在屏幕上打印新的Value *,但不能在我的LLVM IR文件中打印。 for (auto &B : F) { for (BasicBlock::iterator DI

    0热度

    1回答

    考虑具有大型只读内存区域(称为“高内存”)的体系结构(即Infocom Z-machine),该区域仅用于存储字符串(和机器代码,但这并不构成问题)。该区域只能通过显示文本的某些指令进行访问。当然,这意味着指向高内存的指针不能被取消引用。 我想为此架构编写LLVM后端。为了做到这一点,我需要一种方法来告诉后端将某些字符串存储在高端内存中,并获得所述字符串的“压缩地址”(也将字符串转换为Z-Mach

    1热度

    1回答

    在函数中,我想知道参数是如何传递到函数体中的,以便跟踪参数的流向。我试了一个简单的代码,并发现似乎有一个alloc - store模式为每个参数,我想知道它是否是真的? 甲演示代码是 int add(int x, int y){ return x+y; } IR它产生的LLVM是: ; Function Attrs: nounwind uwtable define i32 @ad

    0热度

    1回答

    我想分析LLVM IR中的指针值。 如图LLVM Value Class所示, Value是一个很重要的LLVM类。它是由程序计算的所有 值的基类,可用作其他 值的操作数。值是其他重要类的超类,如 指令和函数。所有值都有一个类型。类型不是 Value的子类。某些值可以有一个名称,它们属于某个 模块。在值上设置名称会自动更新模块的符号表。 要测试一个Value是否是指针,有一个函数a->getTyp

    2热度

    1回答

    所以我创建了一个结构类型与此: llvm::StructType* llvm_struct = llvm::StructType::create(llvm_context, struct_name); std::vector<llvm::Type*> members; for(size_t j = 0; j != struct_data.members.size(); j++){

    0热度

    2回答

    我正在为伪代码语言编写LLVM IR生成器。这种语言应该允许重新定义函数。 这里有一个例子,我有两个名为“f”的函数,但它们有不同的参数。 function f(int i, float r) returns int { return i; } function f(float r, float r2) returns int {return i; } 我认为LLVM可能不同,但我得到 er