首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >LLVM jit和本机

LLVM jit和本机
EN

Stack Overflow用户
提问于 2010-08-18 13:32:32
回答 4查看 16.8K关注 0票数 21

我不明白LLVM JIT和普通的无JIT编译有什么关系,而且文档也不好。

例如,假设我使用clang前端:

  1. 案例1:我使用clang/llvm将C文件编译为本机文件。
  2. 案例2:我编译成某种在x86 JIT上运行的LLVM。在这种情况下,可执行文件包含执行IR on JIT的LLVM运行时,或者它是如何工作的?

这两者之间的区别是什么?它们是正确的吗?LLVM流程是否包括对JIT和非JIT的支持?我什么时候想要使用JIT --对于像C这样的语言来说,它有意义吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-18 13:41:37

您必须了解LLVM是一个帮助您构建编译器的库。Clang仅仅是这个库的前端。

Clang将C/C++代码翻译成LLVM IR,并将其交给LLVM,LLVM将其编译成本机代码。

LLVM还能够直接在内存中生成本机代码,然后可以将其作为普通函数进行调用。因此,情况1.和2.共享LLVM优化和代码生成。

那么如何使用LLVM作为JIT编译器呢?您构建了一个应用程序来生成一些LLVM IR (在内存中),然后使用LLVM库来生成本机代码(仍然在内存中)。LLVM返回一个指针,您可以在以后调用该指针。不会有声响。

但是,您可以使用clang将一些C代码转换为LLVM IR,并将其加载到JIT上下文中以使用这些函数。

真实世界的例子:

Ruby VM

还有Kaleidoscope教程,它展示了如何使用JIT编译器实现一种简单的语言。

票数 34
EN

Stack Overflow用户

发布于 2010-09-19 08:50:12

首先,你得到LLVM字节码(LLVM IR):

代码语言:javascript
复制
clang -emit-llvm -S -o test.bc test.c 

其次,使用LLVM JIT:

代码语言:javascript
复制
lli test.bc

来运行程序。

然后,如果你想获得原生版本,你可以使用LLVM后端:

代码语言:javascript
复制
llc test.bc

从程序集输出中:

代码语言:javascript
复制
as test.S
票数 27
EN

Stack Overflow用户

发布于 2013-08-03 00:36:52

我正在采取步骤从LLVM社区的邮件消息中编译和运行JIT代码。

[LLVMdev] MCJIT and Kaleidoscope Tutorial

头文件:

代码语言:javascript
复制
// foo.h
extern void foo(void);

和一个简单foo()函数的函数:

代码语言:javascript
复制
//foo.c
#include <stdio.h>
void foo(void) {
    puts("Hello, I'm a shared library");
}

其主要功能是:

代码语言:javascript
复制
//main.c
#include <stdio.h>
#include "foo.h"
int main(void) {
    puts("This is a shared library test...");
    foo();
    return 0;
}

使用foo.c构建共享库:

代码语言:javascript
复制
gcc foo.c -shared -o libfoo.so -fPIC

为main.c文件生成LLVM位码:

代码语言:javascript
复制
clang -Wall -c -emit-llvm -O3 main.c -o main.bc

并通过jit (和MCJIT)运行LLVM位码以获得所需的输出:

代码语言:javascript
复制
lli -load=./libfoo.so main.bc
lli -use-mcjit -load=./libfoo.so main.bc

您还可以将clang输出通过管道传输到lli:

代码语言:javascript
复制
clang -Wall -c -emit-llvm -O3 main.c -o - | lli -load=./libfoo.so 

输出

代码语言:javascript
复制
This is a shared library test...
Hello, I'm a shared library

来源:

Shared libraries with GCC on Linux

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3509215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档