LLVM and compiler nomenclature

断了今生、忘了曾经 提交于 2019-12-03 10:42:57
Oak

Clang usage

In general, Clang accepts the same command-line options as GCC. The -c option (only compile and assemble, do not link) and -S option (only compile, do not assemble or link) mean the same thing in both.

LLVM terms regarding the Intermediate Representation

To quote from another answer of mine on this site:

LLVM IR is typically stored on disk in either text files with .ll extension or in binary files with .bc extension. Conversion between the two is trivial, and you can just use llvm-dis for bc -> ll and llvm-as for ll -> bc. The binary format is more memory-efficient, while the textual format is human-readable.

In additional, there are some commonly-used aliases:

  • The binary format, stored in .bc files, is also called bitcode (though I've occasionally heard the term "bitcode" applied to the general IR as well)
  • The IR also called LLVM assembly or the LLVM assembly language

In any case, it all means the same thing, under potentially different representations.

Native Assembly

Native assembly is what many typically think about when hearing the term "assembly" - the low-level language with almost 1:1 mapping to your native machine binary, and unlike LLVM assembly, native assembly is very target-dependent (examples are x86 assembly, ARM assembly, etc.). Native assembly is assembled into native binary via an assembler - LLVM does include one, though you can also use other assemblers as well (e.g. gas).

Native binary - the result of the assembling process - is of course the (only) language the computer really speaks, and after linking it can be loaded into memory and be ran directly on your hardware.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!