使用 C++ API 设置 LLVM 程序集输出语法
Set LLVM assembly output syntax with C++ API
我正在尝试找到一种方法来设置 LLVM 输出的汇编语法(特别是对于 x86)。在 Kaleidoscope 教程的 Compiling to Object Code 部分之后,我正在使用
输出汇编文件
TargetMachine->addPassesToEmitFile(pass, dest, nullptr, llvm::CGFT_AssemblyFile))
但是没有设置输出语法的选项。
llc
有命令行选项 --x86-asm-syntax
,您可以使用它来设置输出汇编语法(对于 x86),所以我相信一定有办法做到这一点。
那么有没有一种方法可以通过 LLVM 的 C++ 来完成API?
以下是我通过阅读 LLVM 源代码发现的一些事情:
- 输出汇编语法由
AssemblyDialect
member in llvm::MCAsmInfo
. For x86 the derived classes of llvm::MCAsmInfo
can be found in X86MCAsmInfo.h
and X86MCAsmInfo.cpp
控制。
- 成员
AssemblyDialect
初始化为AsmWriterFlavor
的值,由命令行选项x86-asm-syntax
. 设置
据我所知,AssemblyDialect
没有在代码库中的其他任何地方引用,因此设置它的唯一方法是通过 x86-asm-syntax
标志。为此,您可以使用 llvm::cl::ParseCommandLineOptions
。将汇编语法设置为 intel 的最小示例:
#include <cassert>
#include <llvm/Support/CommandLine.h>
void set_asm_syntax_to_intel()
{
char const *args[] = { "some-exe-name", "--x86-asm-syntax=intel" };
auto const res = llvm::cl::ParseCommandLineOptions(std::size(args), args);
assert(res);
}
我正在尝试找到一种方法来设置 LLVM 输出的汇编语法(特别是对于 x86)。在 Kaleidoscope 教程的 Compiling to Object Code 部分之后,我正在使用
输出汇编文件TargetMachine->addPassesToEmitFile(pass, dest, nullptr, llvm::CGFT_AssemblyFile))
但是没有设置输出语法的选项。
llc
有命令行选项 --x86-asm-syntax
,您可以使用它来设置输出汇编语法(对于 x86),所以我相信一定有办法做到这一点。
那么有没有一种方法可以通过 LLVM 的 C++ 来完成API?
以下是我通过阅读 LLVM 源代码发现的一些事情:
- 输出汇编语法由
AssemblyDialect
member inllvm::MCAsmInfo
. For x86 the derived classes ofllvm::MCAsmInfo
can be found inX86MCAsmInfo.h
andX86MCAsmInfo.cpp
控制。 - 成员
AssemblyDialect
初始化为AsmWriterFlavor
的值,由命令行选项x86-asm-syntax
. 设置
据我所知,AssemblyDialect
没有在代码库中的其他任何地方引用,因此设置它的唯一方法是通过 x86-asm-syntax
标志。为此,您可以使用 llvm::cl::ParseCommandLineOptions
。将汇编语法设置为 intel 的最小示例:
#include <cassert>
#include <llvm/Support/CommandLine.h>
void set_asm_syntax_to_intel()
{
char const *args[] = { "some-exe-name", "--x86-asm-syntax=intel" };
auto const res = llvm::cl::ParseCommandLineOptions(std::size(args), args);
assert(res);
}