Say "IR" instead of "IL".
While the specifics of these terms are debatable, "IR" generally isn't incorrect in this context, and is the more widely recognized term at this time. See also the discussion in #267. Fixes #267.
This commit is contained in:
@@ -16,8 +16,8 @@ highlighting some of the differences and similarities. Both projects:
|
||||
- Use an ISA-agnostic input language in order to mostly abstract away the
|
||||
differences between target instruction set architectures.
|
||||
- Depend extensively on SSA form.
|
||||
- Have both textual and in-memory forms of their primary intermediate language.
|
||||
(LLVM also has a binary bitcode format; Cretonne doesn't.)
|
||||
- Have both textual and in-memory forms of their primary intermediate
|
||||
representation. (LLVM also has a binary bitcode format; Cretonne doesn't.)
|
||||
- Can target multiple ISAs.
|
||||
- Can cross-compile by default without rebuilding the code generator.
|
||||
|
||||
@@ -41,8 +41,8 @@ LLVM uses multiple intermediate representations as it translates a program to
|
||||
binary machine code:
|
||||
|
||||
`LLVM IR <https://llvm.org/docs/LangRef.html>`_
|
||||
This is the primary intermediate language which has textual, binary, and
|
||||
in-memory representations. It serves two main purposes:
|
||||
This is the primary intermediate representation which has textual, binary, and
|
||||
in-memory forms. It serves two main purposes:
|
||||
|
||||
- An ISA-agnostic, stable(ish) input language that front ends can generate
|
||||
easily.
|
||||
@@ -89,9 +89,9 @@ representation. Some target ISAs have a fast instruction selector that can
|
||||
translate simple code directly to MachineInstrs, bypassing SelectionDAG when
|
||||
possible.
|
||||
|
||||
:doc:`Cretonne <langref>` uses a single intermediate language to cover these
|
||||
levels of abstraction. This is possible in part because of Cretonne's smaller
|
||||
scope.
|
||||
:doc:`Cretonne <langref>` uses a single intermediate representation to cover
|
||||
these levels of abstraction. This is possible in part because of Cretonne's
|
||||
smaller scope.
|
||||
|
||||
- Cretonne does not provide assemblers and disassemblers, so it is not
|
||||
necessary to be able to represent every weird instruction in an ISA. Only
|
||||
@@ -102,7 +102,7 @@ scope.
|
||||
- SSA form is preserved throughout. After register allocation, each SSA value
|
||||
is annotated with an assigned ISA register or stack slot.
|
||||
|
||||
The Cretonne intermediate language is similar to LLVM IR, but at a slightly
|
||||
The Cretonne intermediate representation is similar to LLVM IR, but at a slightly
|
||||
lower level of abstraction.
|
||||
|
||||
Program structure
|
||||
@@ -112,12 +112,12 @@ In LLVM IR, the largest representable unit is the *module* which corresponds
|
||||
more or less to a C translation unit. It is a collection of functions and
|
||||
global variables that may contain references to external symbols too.
|
||||
|
||||
In Cretonne IL, the largest representable unit is the *function*. This is so
|
||||
In Cretonne IR, the largest representable unit is the *function*. This is so
|
||||
that functions can easily be compiled in parallel without worrying about
|
||||
references to shared data structures. Cretonne does not have any
|
||||
inter-procedural optimizations like inlining.
|
||||
|
||||
An LLVM IR function is a graph of *basic blocks*. A Cretonne IL function is a
|
||||
An LLVM IR function is a graph of *basic blocks*. A Cretonne IR function is a
|
||||
graph of *extended basic blocks* that may contain internal branch instructions.
|
||||
The main difference is that an LLVM conditional branch instruction has two
|
||||
target basic blocks---a true and a false edge. A Cretonne branch instruction
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Sphinx domain for documenting compiler intermediate languages.
|
||||
# Sphinx domain for documenting compiler intermediate representations.
|
||||
#
|
||||
# This defines a 'cton' Sphinx domain with the following directives and roles:
|
||||
#
|
||||
@@ -29,10 +29,10 @@ import sphinx.ext.autodoc
|
||||
|
||||
class CtonObject(ObjectDescription):
|
||||
"""
|
||||
Any kind of Cretonne IL object.
|
||||
Any kind of Cretonne IR object.
|
||||
|
||||
This is a shared base class for the different kinds of indexable objects
|
||||
in the Cretonne IL reference.
|
||||
in the Cretonne IR reference.
|
||||
"""
|
||||
option_spec = {
|
||||
'noindex': directives.flag,
|
||||
@@ -98,7 +98,7 @@ def parse_type(name, signode):
|
||||
|
||||
|
||||
class CtonType(CtonObject):
|
||||
"""A Cretonne IL type description."""
|
||||
"""A Cretonne IR type description."""
|
||||
|
||||
def handle_signature(self, sig, signode):
|
||||
"""
|
||||
@@ -112,7 +112,7 @@ class CtonType(CtonObject):
|
||||
return name
|
||||
|
||||
def get_index_text(self, name):
|
||||
return name + ' (IL type)'
|
||||
return name + ' (IR type)'
|
||||
|
||||
|
||||
sep_equal = re.compile('\s*=\s*')
|
||||
@@ -127,7 +127,7 @@ def parse_params(s, signode):
|
||||
|
||||
|
||||
class CtonInst(CtonObject):
|
||||
"""A Cretonne IL instruction."""
|
||||
"""A Cretonne IR instruction."""
|
||||
|
||||
doc_field_types = [
|
||||
TypedField('argument', label=l_('Arguments'),
|
||||
@@ -176,11 +176,11 @@ class CtonInst(CtonObject):
|
||||
|
||||
|
||||
class CtonInstGroup(CtonObject):
|
||||
"""A Cretonne IL instruction group."""
|
||||
"""A Cretonne IR instruction group."""
|
||||
|
||||
|
||||
class CretonneDomain(Domain):
|
||||
"""Cretonne domain for intermediate language objects."""
|
||||
"""Cretonne domain for IR objects."""
|
||||
name = 'cton'
|
||||
label = 'Cretonne'
|
||||
|
||||
|
||||
@@ -5,19 +5,19 @@ Cretonne Language Reference
|
||||
.. default-domain:: cton
|
||||
.. highlight:: cton
|
||||
|
||||
The Cretonne intermediate language (:term:`IL`) has two equivalent
|
||||
representations: an *in-memory data structure* that the code generator library
|
||||
is using, and a *text format* which is used for test cases and debug output.
|
||||
Files containing Cretonne textual IL have the ``.cton`` filename extension.
|
||||
The Cretonne intermediate representation (:term:`IR`) has two primary forms:
|
||||
an *in-memory data structure* that the code generator library is using, and a
|
||||
*text format* which is used for test cases and debug output.
|
||||
Files containing Cretonne textual IR have the ``.cton`` filename extension.
|
||||
|
||||
This reference uses the text format to describe IL semantics but glosses over
|
||||
This reference uses the text format to describe IR semantics but glosses over
|
||||
the finer details of the lexical and syntactic structure of the format.
|
||||
|
||||
|
||||
Overall structure
|
||||
=================
|
||||
|
||||
Cretonne compiles functions independently. A ``.cton`` IL file may contain
|
||||
Cretonne compiles functions independently. A ``.cton`` IR file may contain
|
||||
multiple functions, and the programmatic API can create multiple function
|
||||
handles at the same time, but the functions don't share any data or reference
|
||||
each other directly.
|
||||
@@ -27,7 +27,7 @@ This is a simple C function that computes the average of an array of floats:
|
||||
.. literalinclude:: example.c
|
||||
:language: c
|
||||
|
||||
Here is the same function compiled into Cretonne IL:
|
||||
Here is the same function compiled into Cretonne IR:
|
||||
|
||||
.. literalinclude:: example.cton
|
||||
:language: cton
|
||||
@@ -77,7 +77,7 @@ variable value for the next iteration.
|
||||
|
||||
The `cton_frontend` crate contains utilities for translating from programs
|
||||
containing multiple assignments to the same variables into SSA form for
|
||||
Cretonne :term:`IL`.
|
||||
Cretonne :term:`IR`.
|
||||
|
||||
Such variables can also be presented to Cretonne as :term:`stack slot`\s.
|
||||
Stack slots are accessed with the :inst:`stack_store` and :inst:`stack_load`
|
||||
@@ -303,7 +303,7 @@ indicate the different kinds of immediate operands on an instruction.
|
||||
A floating point condition code. See the :inst:`fcmp` instruction for details.
|
||||
|
||||
The two IEEE floating point immediate types :type:`ieee32` and :type:`ieee64`
|
||||
are displayed as hexadecimal floating point literals in the textual :term:`IL`
|
||||
are displayed as hexadecimal floating point literals in the textual :term:`IR`
|
||||
format. Decimal floating point literals are not allowed because some computer
|
||||
systems can round differently when converting to binary. The hexadecimal
|
||||
floating point format is mostly the same as the one used by C99, but extended
|
||||
@@ -563,7 +563,7 @@ runtime data structures.
|
||||
alignment for storing a pointer.
|
||||
|
||||
Chains of ``deref`` global variables are possible, but cycles are not
|
||||
allowed. They will be caught by the IL verifier.
|
||||
allowed. They will be caught by the IR verifier.
|
||||
|
||||
:arg BaseGV: Global variable containing the base pointer.
|
||||
:arg Offset: Byte offset from the loaded base pointer to the global
|
||||
@@ -1154,19 +1154,11 @@ Glossary
|
||||
The extended basic blocks which contain all the executable code in a
|
||||
function. The function body follows the function preamble.
|
||||
|
||||
intermediate language
|
||||
IL
|
||||
The language used to describe functions to Cretonne. This reference
|
||||
describes the syntax and semantics of the Cretonne IL. The IL has two
|
||||
forms: Textual and an in-memory intermediate representation
|
||||
(:term:`IR`).
|
||||
|
||||
intermediate representation
|
||||
IR
|
||||
The in-memory representation of :term:`IL`. The data structures
|
||||
Cretonne uses to represent a program internally are called the
|
||||
intermediate representation. Cretonne's IR can be converted to text
|
||||
losslessly.
|
||||
The language used to describe functions to Cretonne. This reference
|
||||
describes the syntax and semantics of Cretonne IR. The IR has two
|
||||
forms: Textual, and an in-memory data structure.
|
||||
|
||||
stack slot
|
||||
A fixed size memory allocation in the current function's activation
|
||||
|
||||
@@ -89,7 +89,7 @@ easier to provide substantial input functions for the compiler tests.
|
||||
|
||||
File tests are :file:`*.cton` files in the :file:`filetests/` directory
|
||||
hierarchy. Each file has a header describing what to test followed by a number
|
||||
of input functions in the :doc:`Cretonne textual intermediate language
|
||||
of input functions in the :doc:`Cretonne textual intermediate representation
|
||||
<langref>`:
|
||||
|
||||
.. productionlist::
|
||||
@@ -166,7 +166,7 @@ Cretonne's tests don't need this.
|
||||
----------
|
||||
|
||||
This is one of the simplest file tests, used for testing the conversion to and
|
||||
from textual IL. The ``test cat`` command simply parses each function and
|
||||
from textual IR. The ``test cat`` command simply parses each function and
|
||||
converts it back to text again. The text of each function is then matched
|
||||
against the associated filecheck directives.
|
||||
|
||||
@@ -188,7 +188,7 @@ Example::
|
||||
`test verifier`
|
||||
---------------
|
||||
|
||||
Run each function through the IL verifier and check that it produces the
|
||||
Run each function through the IR verifier and check that it produces the
|
||||
expected error messages.
|
||||
|
||||
Expected error messages are indicated with an ``error:`` directive *on the
|
||||
@@ -351,4 +351,4 @@ Each function is passed through the full ``Context::compile()`` function
|
||||
which is normally used to compile code. This type of test often depends
|
||||
on assertions or verifier errors, but it is also possible to use
|
||||
filecheck directives which will be matched against the final form of the
|
||||
Cretonne IL right before binary machine code emission.
|
||||
Cretonne IR right before binary machine code emission.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//! The `cat` sub-command.
|
||||
//!
|
||||
//! Read a sequence of Cretonne IL files and print them again to stdout. This has the effect of
|
||||
//! Read a sequence of Cretonne IR files and print them again to stdout. This has the effect of
|
||||
//! normalizing formatting and removing comments.
|
||||
|
||||
use cton_reader::parse_functions;
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
//! CLI tool to compile cretonne IL into native code.
|
||||
//!
|
||||
//! Reads IR files into Cretonne IL and compiles it.
|
||||
//! CLI tool to read Cretonne IR files and compile them into native code.
|
||||
|
||||
use cton_reader::parse_test;
|
||||
use std::path::PathBuf;
|
||||
|
||||
@@ -38,12 +38,12 @@ Options:
|
||||
-T, --time-passes
|
||||
print pass timing report
|
||||
-t, --just-decode
|
||||
just decode WebAssembly to Cretonne IL
|
||||
just decode WebAssembly to Cretonne IR
|
||||
-s, --print-size
|
||||
prints generated code size
|
||||
-c, --check-translation
|
||||
just checks the correctness of Cretonne IL translated from WebAssembly
|
||||
-p, --print print the resulting Cretonne IL
|
||||
just checks the correctness of Cretonne IR translated from WebAssembly
|
||||
-p, --print print the resulting Cretonne IR
|
||||
-h, --help print this help message
|
||||
--set=<set> configure Cretonne settings
|
||||
--isa=<isa> specify the Cretonne ISA
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//! The `print-cfg` sub-command.
|
||||
//!
|
||||
//! Read a series of Cretonne IL files and print their control flow graphs
|
||||
//! Read a series of Cretonne IR files and print their control flow graphs
|
||||
//! in graphviz format.
|
||||
|
||||
use CommandResult;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//! CLI tool to use the functions provided by the [cretonne-wasm](../cton_wasm/index.html) crate.
|
||||
//!
|
||||
//! Reads Wasm binary files, translates the functions' code to Cretonne IL.
|
||||
//! Reads Wasm binary files, translates the functions' code to Cretonne IR.
|
||||
#![cfg_attr(feature = "cargo-clippy", allow(too_many_arguments, cyclomatic_complexity))]
|
||||
|
||||
use cton_wasm::{translate_module, DummyEnvironment, ModuleEnvironment};
|
||||
|
||||
Reference in New Issue
Block a user