使用 SPEC 修改编译过程以使用 LLVM
我目前正在运行一些 llvm pass,并希望使用 SPEC 2006 CPU 基准测试套件来测试它们的有用性。但是,我还没有弄清楚如何修改 SPEC 设置以执行除使用 llvm-gcc 输出 llvm 位码之外的任何操作。以下是我想要修改 SPEC 的工作流程:
使用 llvm 将 .o 文件编译为 llvm-bytecode
llvm-gcc -emit-llvm *.c
对于每个 .o 文件,运行 opt(llvm 的优化过程):
opt -adce -mem2reg cfline.o
使用 llvm-link 链接:
llvm-link *.o -o out.o.linked
打开 llvm字节码转化为汇编
llc out.o.linked
最后将其转化为可执行代码:
gcc out.o.linked -o out.executable
有什么办法可以做到这一点吗?我知道我可以编辑 .cfg 文件来发出 llvm,但我不知道如何选择不同的链接/预链接过程。
谢谢!
I am currently working on running some llvm passes and would like to benchmark their usefulness using the SPEC 2006 CPU benchmark suite. However, I've not figured out how to modify the SPEC setup to do anything other than use llvm-gcc to output llvm bitcode. Here is what I'd like to modify the workflow of SPEC to do:
compile the .o files with llvm into llvm-bytecode
llvm-gcc -emit-llvm *.c
For each .o file, run opt (llvm's optimization pass):
opt -adce -mem2reg cfline.o
Link with llvm-link:
llvm-link *.o -o out.o.linked
Turn the llvm bytecode into assembly
llc out.o.linked
And finally turn that into executable code:
gcc out.o.linked -o out.executable
Is there a way I can do this? I know I can edit the .cfg files to emit llvm, but then I don't know how to choose a different linking/pre-linking procedure.
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
LLVM 有一个 test-suite 子项目,它已经知道如何构建和运行 SPEC 。有关详细信息,请参阅文档。
LLVM has a test-suite subproject that already knows how to build and run SPEC. See the docs for more info.
在CPUSPEC2017中,可以使用配置文件修改链接器。需要设置CLD/CXXLD。例如,
CLD = $(LLVM_BIN_PATH)/llvm-link,
CXXLD = $(LLVM_BIN_PATH)/llvm-link.
还可以通过修改 Makefile.defaults 文件来运行 opt 命令。可以将其添加到指定构建可执行文件的命令的部分中。
In CPUSPEC2017, the linker can be modified using the config file. CLD/CXXLD needs to be set. For example,
CLD = $(LLVM_BIN_PATH)/llvm-link,
CXXLD = $(LLVM_BIN_PATH)/llvm-link.
The opt command can also be run by modifying the Makefile.defaults file. It can be added in the section specifying the commands to build the executables.