Frequently Asked Questions (FAQ)

  • 许可协议
    • Illinois 大学的开源协议是一个真正的开源协议吗?
    • 我可以修改LLVM 源代码并发布修改后的代码吗?
    • 我可以修改LLVM源代码并发布二进制或者其他基于此的工具,需要包含源代码吗?
  • 源代码
    • LLVM 是用什么语言写的?
    • LLVM 可移植性怎么样?
    • 应该用什么样的API去存储一个虚拟寄存器LLVM IR SSA?

许可协议

Illinois 大学的开源协议是一个真正的开源协议吗?

是的,其协议被Open Source Initiative (OSI)所认可。

我可以修改LLVM 源代码并发布修改后的代码吗?

可以。修改后的源代码必须保留版权提示和LLVM协议中的三条。

我可以修改LLVM源代码并发布二进制或者其他基于此的工具,需要包含源代码吗?

可以。

源代码

LLVM 是用什么语言写的?

所有的LLVM工具和库是使用了大量STL的C++语言写的。

LLVM 可移植性怎么样?

LLVM源代码可以移植到大多数现代的类Unix系统上。大多数代码使用标准C++,系统服务被抽象到一个支持库。编译和测试LLVM的工具被移植到了很多平台。

一些移植问题任然可能存在于以下方面:

  • automake/makefile 编译系统严重依赖UNIX shell 工具,例如Bourne shell和sed。移植到没有这些工具的系统(例如MacOS9, plan 9)将需要更多努力。

应该用什么样的API去存储一个虚拟寄存器LLVM IR SSA?

简单来说不可能,当你意识到实际的时候会发现这是一个愚蠢的问题。如下代码:

  1. %result = add i32 %foo, %bar

, %result 只是add指令的结果名称。换言之,%result就是add指令。赋值操作并不显式的存储任何东西到任何寄存器。‘=’更类似数学范畴的含义。

详细解释: