Fix some markdown issues.
Work around some cases where the old markdown parser differs from the new Pulldown parser for the documentation.
This commit is contained in:
@@ -705,7 +705,7 @@ impl DataFlowGraph {
|
||||
/// Returns the position of `val` before removal.
|
||||
///
|
||||
/// *Important*: to ensure O(1) deletion, this method swaps the removed parameter with the
|
||||
/// last `ebb`` parameter. This can disrupt all the branch instructions jumping to this
|
||||
/// last `ebb` parameter. This can disrupt all the branch instructions jumping to this
|
||||
/// `ebb` for which you have to change the branch argument order if necessary.
|
||||
///
|
||||
/// Panics if `val` is not an EBB parameter.
|
||||
|
||||
@@ -526,7 +526,7 @@ impl Ieee32 {
|
||||
Ieee32(x)
|
||||
}
|
||||
|
||||
/// Create an `Ieee32` number representing 2.0^n.
|
||||
/// Create an `Ieee32` number representing `2.0^n`.
|
||||
pub fn pow2<I: Into<i32>>(n: I) -> Ieee32 {
|
||||
let n = n.into();
|
||||
let w = 8;
|
||||
@@ -578,7 +578,7 @@ impl Ieee64 {
|
||||
Ieee64(x)
|
||||
}
|
||||
|
||||
/// Create an `Ieee64` number representing 2.0^n.
|
||||
/// Create an `Ieee64` number representing `2.0^n`.
|
||||
pub fn pow2<I: Into<i64>>(n: I) -> Ieee64 {
|
||||
let n = n.into();
|
||||
let w = 11;
|
||||
|
||||
@@ -265,8 +265,9 @@ impl Type {
|
||||
}
|
||||
|
||||
/// True iff:
|
||||
/// 1) self.lane_count() == other.lane_count() and
|
||||
/// 2) self.lane_bits() >= other.lane_bits()
|
||||
///
|
||||
/// 1. `self.lane_count() == other.lane_count()` and
|
||||
/// 2. `self.lane_bits() >= other.lane_bits()`
|
||||
pub fn wider_or_equal(self, other: Type) -> bool {
|
||||
self.lane_count() == other.lane_count() && self.lane_bits() >= other.lane_bits()
|
||||
}
|
||||
|
||||
@@ -23,10 +23,10 @@ pub enum CtonError {
|
||||
|
||||
/// An implementation limit was exceeded.
|
||||
///
|
||||
/// Cretonne can compile very large and complicated functions, but the implementation has
|
||||
/// limits that cause compilation to fail when they are exceeded.
|
||||
/// Cretonne can compile very large and complicated functions, but the [implementation has
|
||||
/// limits][limits] that cause compilation to fail when they are exceeded.
|
||||
///
|
||||
/// See http://cretonne.readthedocs.io/en/latest/langref.html#implementation-limits
|
||||
/// [limits]: http://cretonne.readthedocs.io/en/latest/langref.html#implementation-limits
|
||||
ImplLimitExceeded,
|
||||
|
||||
/// The code size for the function is too large.
|
||||
|
||||
@@ -1,59 +1,59 @@
|
||||
//! A verifier for ensuring that functions are well formed.
|
||||
//! It verifies:
|
||||
//!
|
||||
//! EBB integrity
|
||||
//! EBB integrity
|
||||
//!
|
||||
//! - All instructions reached from the `ebb_insts` iterator must belong to
|
||||
//! the EBB as reported by `inst_ebb()`.
|
||||
//! - Every EBB must end in a terminator instruction, and no other instruction
|
||||
//! can be a terminator.
|
||||
//! - Every value in the `ebb_params` iterator belongs to the EBB as reported by `value_ebb`.
|
||||
//! - All instructions reached from the `ebb_insts` iterator must belong to
|
||||
//! the EBB as reported by `inst_ebb()`.
|
||||
//! - Every EBB must end in a terminator instruction, and no other instruction
|
||||
//! can be a terminator.
|
||||
//! - Every value in the `ebb_params` iterator belongs to the EBB as reported by `value_ebb`.
|
||||
//!
|
||||
//! Instruction integrity
|
||||
//! Instruction integrity
|
||||
//!
|
||||
//! - The instruction format must match the opcode.
|
||||
//! - All result values must be created for multi-valued instructions.
|
||||
//! - All referenced entities must exist. (Values, EBBs, stack slots, ...)
|
||||
//! - Instructions must not reference (eg. branch to) the entry block.
|
||||
//! - The instruction format must match the opcode.
|
||||
//! - All result values must be created for multi-valued instructions.
|
||||
//! - All referenced entities must exist. (Values, EBBs, stack slots, ...)
|
||||
//! - Instructions must not reference (eg. branch to) the entry block.
|
||||
//!
|
||||
//! SSA form
|
||||
//! SSA form
|
||||
//!
|
||||
//! - Values must be defined by an instruction that exists and that is inserted in
|
||||
//! an EBB, or be an argument of an existing EBB.
|
||||
//! - Values used by an instruction must dominate the instruction.
|
||||
//! - Values must be defined by an instruction that exists and that is inserted in
|
||||
//! an EBB, or be an argument of an existing EBB.
|
||||
//! - Values used by an instruction must dominate the instruction.
|
||||
//!
|
||||
//! Control flow graph and dominator tree integrity:
|
||||
//! Control flow graph and dominator tree integrity:
|
||||
//!
|
||||
//! - All predecessors in the CFG must be branches to the EBB.
|
||||
//! - All branches to an EBB must be present in the CFG.
|
||||
//! - A recomputed dominator tree is identical to the existing one.
|
||||
//! - All predecessors in the CFG must be branches to the EBB.
|
||||
//! - All branches to an EBB must be present in the CFG.
|
||||
//! - A recomputed dominator tree is identical to the existing one.
|
||||
//!
|
||||
//! Type checking
|
||||
//! Type checking
|
||||
//!
|
||||
//! - Compare input and output values against the opcode's type constraints.
|
||||
//! For polymorphic opcodes, determine the controlling type variable first.
|
||||
//! - Branches and jumps must pass arguments to destination EBBs that match the
|
||||
//! expected types exactly. The number of arguments must match.
|
||||
//! - All EBBs in a jump_table must take no arguments.
|
||||
//! - Function calls are type checked against their signature.
|
||||
//! - The entry block must take arguments that match the signature of the current
|
||||
//! function.
|
||||
//! - All return instructions must have return value operands matching the current
|
||||
//! function signature.
|
||||
//! - Compare input and output values against the opcode's type constraints.
|
||||
//! For polymorphic opcodes, determine the controlling type variable first.
|
||||
//! - Branches and jumps must pass arguments to destination EBBs that match the
|
||||
//! expected types exactly. The number of arguments must match.
|
||||
//! - All EBBs in a jump_table must take no arguments.
|
||||
//! - Function calls are type checked against their signature.
|
||||
//! - The entry block must take arguments that match the signature of the current
|
||||
//! function.
|
||||
//! - All return instructions must have return value operands matching the current
|
||||
//! function signature.
|
||||
//!
|
||||
//! Global variables
|
||||
//! Global variables
|
||||
//!
|
||||
//! - Detect cycles in deref(base) declarations.
|
||||
//! - Detect cycles in deref(base) declarations.
|
||||
//!
|
||||
//! TODO:
|
||||
//! Ad hoc checking
|
||||
//! Ad hoc checking
|
||||
//!
|
||||
//! - Stack slot loads and stores must be in-bounds.
|
||||
//! - Immediate constraints for certain opcodes, like `udiv_imm v3, 0`.
|
||||
//! - `Insertlane` and `extractlane` instructions have immediate lane numbers that must be in
|
||||
//! range for their polymorphic type.
|
||||
//! - Swizzle and shuffle instructions take a variable number of lane arguments. The number
|
||||
//! of arguments must match the destination type, and the lane indexes must be in range.
|
||||
//! - Stack slot loads and stores must be in-bounds.
|
||||
//! - Immediate constraints for certain opcodes, like `udiv_imm v3, 0`.
|
||||
//! - `Insertlane` and `extractlane` instructions have immediate lane numbers that must be in
|
||||
//! range for their polymorphic type.
|
||||
//! - Swizzle and shuffle instructions take a variable number of lane arguments. The number
|
||||
//! of arguments must match the destination type, and the lane indexes must be in range.
|
||||
|
||||
use dbg::DisplayList;
|
||||
use dominator_tree::DominatorTree;
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
//! # Directives
|
||||
//!
|
||||
//! These are the directives recognized by *filecheck*:
|
||||
//!
|
||||
//! <pre class="rust">
|
||||
//! <a href="#the-check-directive">check: <i><pattern></i></a>
|
||||
//! <a href="#the-sameln-directive">sameln: <i><pattern></i></a>
|
||||
@@ -18,6 +19,7 @@
|
||||
//! <a href="#the-not-directive">not: <i><pattern></i></a>
|
||||
//! <a href="#the-regex-directive">regex: <i><variable></i>=<i><regex></i></a>
|
||||
//! </pre>
|
||||
//!
|
||||
//! Each directive is described in more detail below.
|
||||
//!
|
||||
//! ## Example
|
||||
|
||||
@@ -43,8 +43,9 @@ impl FuncTranslator {
|
||||
/// - The declaration of *locals*, and
|
||||
/// - The function *body* as an expression.
|
||||
///
|
||||
/// See [the WebAssembly specification]
|
||||
/// (http://webassembly.github.io/spec/binary/modules.html#code-section).
|
||||
/// See [the WebAssembly specification][wasm].
|
||||
///
|
||||
/// [wasm]: http://webassembly.github.io/spec/binary/modules.html#code-section
|
||||
///
|
||||
/// The Cretonne IR function `func` should be completely empty except for the `func.signature`
|
||||
/// and `func.name` fields. The signature may contain special-purpose arguments which are not
|
||||
|
||||
Reference in New Issue
Block a user