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:
Jakob Stoklund Olesen
2018-01-08 16:18:10 -08:00
parent 4afa19ddff
commit af89006b09
7 changed files with 53 additions and 49 deletions

View File

@@ -705,7 +705,7 @@ impl DataFlowGraph {
/// Returns the position of `val` before removal. /// Returns the position of `val` before removal.
/// ///
/// *Important*: to ensure O(1) deletion, this method swaps the removed parameter with the /// *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. /// `ebb` for which you have to change the branch argument order if necessary.
/// ///
/// Panics if `val` is not an EBB parameter. /// Panics if `val` is not an EBB parameter.

View File

@@ -526,7 +526,7 @@ impl Ieee32 {
Ieee32(x) 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 { pub fn pow2<I: Into<i32>>(n: I) -> Ieee32 {
let n = n.into(); let n = n.into();
let w = 8; let w = 8;
@@ -578,7 +578,7 @@ impl Ieee64 {
Ieee64(x) 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 { pub fn pow2<I: Into<i64>>(n: I) -> Ieee64 {
let n = n.into(); let n = n.into();
let w = 11; let w = 11;

View File

@@ -265,8 +265,9 @@ impl Type {
} }
/// True iff: /// 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 { pub fn wider_or_equal(self, other: Type) -> bool {
self.lane_count() == other.lane_count() && self.lane_bits() >= other.lane_bits() self.lane_count() == other.lane_count() && self.lane_bits() >= other.lane_bits()
} }

View File

@@ -23,10 +23,10 @@ pub enum CtonError {
/// An implementation limit was exceeded. /// An implementation limit was exceeded.
/// ///
/// Cretonne can compile very large and complicated functions, but the implementation has /// Cretonne can compile very large and complicated functions, but the [implementation has
/// limits that cause compilation to fail when they are exceeded. /// 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, ImplLimitExceeded,
/// The code size for the function is too large. /// The code size for the function is too large.

View File

@@ -1,59 +1,59 @@
//! A verifier for ensuring that functions are well formed. //! A verifier for ensuring that functions are well formed.
//! It verifies: //! It verifies:
//! //!
//! EBB integrity //! EBB integrity
//! //!
//! - All instructions reached from the `ebb_insts` iterator must belong to //! - All instructions reached from the `ebb_insts` iterator must belong to
//! the EBB as reported by `inst_ebb()`. //! the EBB as reported by `inst_ebb()`.
//! - Every EBB must end in a terminator instruction, and no other instruction //! - Every EBB must end in a terminator instruction, and no other instruction
//! can be a terminator. //! can be a terminator.
//! - Every value in the `ebb_params` iterator belongs to the EBB as reported by `value_ebb`. //! - 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. //! - The instruction format must match the opcode.
//! - All result values must be created for multi-valued instructions. //! - All result values must be created for multi-valued instructions.
//! - All referenced entities must exist. (Values, EBBs, stack slots, ...) //! - All referenced entities must exist. (Values, EBBs, stack slots, ...)
//! - Instructions must not reference (eg. branch to) the entry block. //! - 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 //! - Values must be defined by an instruction that exists and that is inserted in
//! an EBB, or be an argument of an existing EBB. //! an EBB, or be an argument of an existing EBB.
//! - Values used by an instruction must dominate the instruction. //! - 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 predecessors in the CFG must be branches to the EBB.
//! - All branches to an EBB must be present in the CFG. //! - All branches to an EBB must be present in the CFG.
//! - A recomputed dominator tree is identical to the existing one. //! - 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. //! - Compare input and output values against the opcode's type constraints.
//! For polymorphic opcodes, determine the controlling type variable first. //! For polymorphic opcodes, determine the controlling type variable first.
//! - Branches and jumps must pass arguments to destination EBBs that match the //! - Branches and jumps must pass arguments to destination EBBs that match the
//! expected types exactly. The number of arguments must match. //! expected types exactly. The number of arguments must match.
//! - All EBBs in a jump_table must take no arguments. //! - All EBBs in a jump_table must take no arguments.
//! - Function calls are type checked against their signature. //! - Function calls are type checked against their signature.
//! - The entry block must take arguments that match the signature of the current //! - The entry block must take arguments that match the signature of the current
//! function. //! function.
//! - All return instructions must have return value operands matching the current //! - All return instructions must have return value operands matching the current
//! function signature. //! function signature.
//! //!
//! Global variables //! Global variables
//! //!
//! - Detect cycles in deref(base) declarations. //! - Detect cycles in deref(base) declarations.
//! //!
//! TODO: //! TODO:
//! Ad hoc checking //! Ad hoc checking
//! //!
//! - Stack slot loads and stores must be in-bounds. //! - Stack slot loads and stores must be in-bounds.
//! - Immediate constraints for certain opcodes, like `udiv_imm v3, 0`. //! - Immediate constraints for certain opcodes, like `udiv_imm v3, 0`.
//! - `Insertlane` and `extractlane` instructions have immediate lane numbers that must be in //! - `Insertlane` and `extractlane` instructions have immediate lane numbers that must be in
//! range for their polymorphic type. //! range for their polymorphic type.
//! - Swizzle and shuffle instructions take a variable number of lane arguments. The number //! - 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. //! of arguments must match the destination type, and the lane indexes must be in range.
use dbg::DisplayList; use dbg::DisplayList;
use dominator_tree::DominatorTree; use dominator_tree::DominatorTree;

View File

@@ -10,6 +10,7 @@
//! # Directives //! # Directives
//! //!
//! These are the directives recognized by *filecheck*: //! These are the directives recognized by *filecheck*:
//!
//! <pre class="rust"> //! <pre class="rust">
//! <a href="#the-check-directive">check: <i>&lt;pattern&gt;</i></a> //! <a href="#the-check-directive">check: <i>&lt;pattern&gt;</i></a>
//! <a href="#the-sameln-directive">sameln: <i>&lt;pattern&gt;</i></a> //! <a href="#the-sameln-directive">sameln: <i>&lt;pattern&gt;</i></a>
@@ -18,6 +19,7 @@
//! <a href="#the-not-directive">not: <i>&lt;pattern&gt;</i></a> //! <a href="#the-not-directive">not: <i>&lt;pattern&gt;</i></a>
//! <a href="#the-regex-directive">regex: <i>&lt;variable&gt;</i>=<i>&lt;regex&gt;</i></a> //! <a href="#the-regex-directive">regex: <i>&lt;variable&gt;</i>=<i>&lt;regex&gt;</i></a>
//! </pre> //! </pre>
//!
//! Each directive is described in more detail below. //! Each directive is described in more detail below.
//! //!
//! ## Example //! ## Example

View File

@@ -43,8 +43,9 @@ impl FuncTranslator {
/// - The declaration of *locals*, and /// - The declaration of *locals*, and
/// - The function *body* as an expression. /// - The function *body* as an expression.
/// ///
/// See [the WebAssembly specification] /// See [the WebAssembly specification][wasm].
/// (http://webassembly.github.io/spec/binary/modules.html#code-section). ///
/// [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` /// 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 /// and `func.name` fields. The signature may contain special-purpose arguments which are not