如何使用 Clang 在 C 程序中嵌入 LLVM 程序集或内在函数?

Posted

技术标签:

【中文标题】如何使用 Clang 在 C 程序中嵌入 LLVM 程序集或内在函数?【英文标题】:How to embed LLVM assembly or intrinsics in C program with Clang? 【发布时间】:2013-02-27 13:38:17 【问题描述】:

C 编译器允许在 C 程序中嵌入汇编代码。

我很确定 Clang 应该允许在 C 程序中嵌入 LLVM 程序集或内部代码。如何在 C 代码中嵌入 LLVM 程序集?

【问题讨论】:

是的,它应该允许它。不,它还没有这样做,抱歉。 哪些内在函数?如果您只想使用 ARM NEON 内部函数,you can do that without resorting to inline assembly。 @robmayoff 这就是我的意思:llvm.org/docs/LangRef.html#intrinsic-functions @SK-logic 目前还是这样吗? 【参考方案1】:

现在你不能。

但是,您可以在自己的文件中单独编写 LLVM 汇编函数,将其标记为 alwaysinline,然后将其与其余文件一起编译 - 这应该会得到相同的结果。见this related question on how to first compile your C files to IR and then link them together。

你甚至可以单独编译文件并确保你执行link-time optimization (LTO),应该做同样的事情。

【讨论】:

@Jay pass 仍然存在并默认启用:llvm.org/doxygen/AlwaysInliner_8cpp_source.html - 仍然不支持 LLVM IR asm ...

以上是关于如何使用 Clang 在 C 程序中嵌入 LLVM 程序集或内在函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 clang 编译为 llvm IR

LLVM 之 Clang 静态分析器篇:程序缺陷诊断——非法读写已释放的内存

LLVM 之 Clang 静态分析器篇:程序缺陷诊断——内存重复释放

LLVM 之 Clang 静态分析器篇:程序缺陷诊断——内存泄露

如何自托管 Clang?

在C ++项目中将clang用作库