使用LLVM将x86代码重新编译为更快的x86代码

osg*_*sgx 16 x86 llvm recompile

是否可以使用x86 32位代码的输入运行LLVM编译器?有一个庞大的算法,我没有源代码,我想让它在相同的硬件上运行得更快.我可以通过优化将它从x86转换回x86.

这段代码运行时间很长,所以我想对它进行静态重新编译.此外,我可以执行它的运行时配置文件并提供LLVM提示,哪些分支更可能.

原始代码是为x86 + x87编写的,不使用SSE/MMX/SSE2.重新编译后,它有机会使用x86_64和/或SSE3.此外,代码将以更优化的方式再生到硬件解码器.

谢谢.

Ric*_*ton 12

LLVM无法开箱即用.您必须将x86二进制文件写入LLVM中间表示(IR)转换器.那将是一项非常重要的任务.如果x86代码足够简单,它可能会非常接近地映射到IR,但是某些x86指令不会直接映射,例如堆栈指针操作.

编辑:您也可以考虑尝试类似于QEMU的方法.QEMU在运行时翻译二进制文件,当我运行PowerPC代码时,每个基本块在执行之前都会被转换为X86代码.您可以弄清楚如何将目标文件分解为基本块并为每个块生成LLVM IR,丢弃内容(如参数传递等)并用直接LLVM IR替换它.

不过,这仍然是一项艰巨的工作.从头开始重写算法可能更容易.

"使用QEMU动态转换x86到LLVM"中描述了这个精确的过程

  • 据我所知,没有这样的项目,但有一次有一个项目使用LLVM来JIT编译QEMU的代码(http://code.google.com/p/llvm-qemu/),这是密切相关. (3认同)