Derive Ord for all entities (#1313)

This commit is contained in:
bjorn3
2020-01-22 18:18:23 +01:00
committed by Benjamin Bouvier
parent b4c6bfd371
commit e1446cff8d

View File

@@ -31,6 +31,8 @@ use serde::{Deserialize, Serialize};
/// ///
/// You can get an `Ebb` using /// You can get an `Ebb` using
/// [`FunctionBuilder::create_ebb`](https://docs.rs/cranelift-frontend/*/cranelift_frontend/struct.FunctionBuilder.html#method.create_ebb) /// [`FunctionBuilder::create_ebb`](https://docs.rs/cranelift-frontend/*/cranelift_frontend/struct.FunctionBuilder.html#method.create_ebb)
///
/// While the order is stable, it is arbitrary and does not necessarily resemble the layout order.
#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)] #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct Ebb(u32); pub struct Ebb(u32);
entity_impl!(Ebb, "ebb"); entity_impl!(Ebb, "ebb");
@@ -61,6 +63,8 @@ impl Ebb {
/// - [`null`](super::InstBuilder::null) for null reference constants /// - [`null`](super::InstBuilder::null) for null reference constants
/// ///
/// Any `InstBuilder` instruction that has an output will also return a `Value`. /// Any `InstBuilder` instruction that has an output will also return a `Value`.
///
/// While the order is stable, it is arbitrary.
#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)] #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct Value(u32); pub struct Value(u32);
entity_impl!(Value, "v"); entity_impl!(Value, "v");
@@ -91,6 +95,8 @@ impl Value {
/// on the type of instruction. /// on the type of instruction.
/// ///
/// [inst_comment]: https://github.com/bjorn3/rustc_codegen_cranelift/blob/0f8814fd6da3d436a90549d4bb19b94034f2b19c/src/pretty_clif.rs /// [inst_comment]: https://github.com/bjorn3/rustc_codegen_cranelift/blob/0f8814fd6da3d436a90549d4bb19b94034f2b19c/src/pretty_clif.rs
///
/// While the order is stable, it is arbitrary and does not necessarily resemble the layout order.
#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)] #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct Inst(u32); pub struct Inst(u32);
entity_impl!(Inst, "inst"); entity_impl!(Inst, "inst");
@@ -107,7 +113,9 @@ entity_impl!(Inst, "inst");
/// [`stack_addr`](super::InstBuilder::stack_addr), /// [`stack_addr`](super::InstBuilder::stack_addr),
/// [`stack_load`](super::InstBuilder::stack_load), and /// [`stack_load`](super::InstBuilder::stack_load), and
/// [`stack_store`](super::InstBuilder::stack_store). /// [`stack_store`](super::InstBuilder::stack_store).
#[derive(Copy, Clone, PartialEq, Eq, Hash)] ///
/// While the order is stable, it is arbitrary and does not necessarily resemble the stack order.
#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
pub struct StackSlot(u32); pub struct StackSlot(u32);
entity_impl!(StackSlot, "ss"); entity_impl!(StackSlot, "ss");
@@ -142,7 +150,9 @@ impl StackSlot {
/// ///
/// `GlobalValue`s can be retrieved with /// `GlobalValue`s can be retrieved with
/// [`InstBuilder:global_value`](super::InstBuilder::global_value). /// [`InstBuilder:global_value`](super::InstBuilder::global_value).
#[derive(Copy, Clone, PartialEq, Eq, Hash)] ///
/// While the order is stable, it is arbitrary.
#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct GlobalValue(u32); pub struct GlobalValue(u32);
entity_impl!(GlobalValue, "gv"); entity_impl!(GlobalValue, "gv");
@@ -164,6 +174,9 @@ impl GlobalValue {
/// You can store [`ConstantData`](super::ConstantData) in a /// You can store [`ConstantData`](super::ConstantData) in a
/// [`ConstantPool`](super::ConstantPool) for efficient storage and retrieval. /// [`ConstantPool`](super::ConstantPool) for efficient storage and retrieval.
/// See [`ConstantPool::insert`](super::ConstantPool::insert). /// See [`ConstantPool::insert`](super::ConstantPool::insert).
///
/// While the order is stable, it is arbitrary and does not necessarily resemble the order in which
/// the constants are written in the constant pool.
#[derive(Copy, Clone, PartialEq, Eq, Hash, Ord, PartialOrd)] #[derive(Copy, Clone, PartialEq, Eq, Hash, Ord, PartialOrd)]
pub struct Constant(u32); pub struct Constant(u32);
entity_impl!(Constant, "const"); entity_impl!(Constant, "const");
@@ -187,7 +200,9 @@ impl Constant {
/// [`InstructionData`](super::instructions::InstructionData) struct and therefore must be /// [`InstructionData`](super::instructions::InstructionData) struct and therefore must be
/// tracked separately in [`DataFlowGraph::immediates`](super::dfg::DataFlowGraph). `Immediate` /// tracked separately in [`DataFlowGraph::immediates`](super::dfg::DataFlowGraph). `Immediate`
/// provides a way to reference values stored there. /// provides a way to reference values stored there.
#[derive(Copy, Clone, PartialEq, Eq, Hash)] ///
/// While the order is stable, it is arbitrary.
#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct Immediate(u32); pub struct Immediate(u32);
entity_impl!(Immediate, "imm"); entity_impl!(Immediate, "imm");
@@ -214,7 +229,9 @@ impl Immediate {
/// ///
/// `JumpTable`s can be created with /// `JumpTable`s can be created with
/// [`create_jump_table`](https://docs.rs/cranelift-frontend/*/cranelift_frontend/struct.FunctionBuilder.html#method.create_jump_table). /// [`create_jump_table`](https://docs.rs/cranelift-frontend/*/cranelift_frontend/struct.FunctionBuilder.html#method.create_jump_table).
#[derive(Copy, Clone, PartialEq, Eq, Hash)] ///
/// While the order is stable, it is arbitrary.
#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
pub struct JumpTable(u32); pub struct JumpTable(u32);
entity_impl!(JumpTable, "jt"); entity_impl!(JumpTable, "jt");
@@ -248,7 +265,9 @@ impl JumpTable {
/// - [`FuncEnvironment::make_direct_func`](https://docs.rs/cranelift-wasm/*/cranelift_wasm/trait.FuncEnvironment.html#tymethod.make_direct_func) /// - [`FuncEnvironment::make_direct_func`](https://docs.rs/cranelift-wasm/*/cranelift_wasm/trait.FuncEnvironment.html#tymethod.make_direct_func)
/// for functions declared in the same WebAssembly /// for functions declared in the same WebAssembly
/// [`FuncEnvironment`](https://docs.rs/cranelift-wasm/*/cranelift_wasm/trait.FuncEnvironment.html#tymethod.make_direct_func) /// [`FuncEnvironment`](https://docs.rs/cranelift-wasm/*/cranelift_wasm/trait.FuncEnvironment.html#tymethod.make_direct_func)
#[derive(Copy, Clone, PartialEq, Eq, Hash)] ///
/// While the order is stable, it is arbitrary.
#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct FuncRef(u32); pub struct FuncRef(u32);
entity_impl!(FuncRef, "fn"); entity_impl!(FuncRef, "fn");
@@ -277,7 +296,9 @@ impl FuncRef {
/// You can retrieve the [`Signature`](super::Signature) that was used to create a `SigRef` with /// You can retrieve the [`Signature`](super::Signature) that was used to create a `SigRef` with
/// [`FunctionBuilder::signature`](https://docs.rs/cranelift-frontend/*/cranelift_frontend/struct.FunctionBuilder.html#method.signature) or /// [`FunctionBuilder::signature`](https://docs.rs/cranelift-frontend/*/cranelift_frontend/struct.FunctionBuilder.html#method.signature) or
/// [`func.dfg.signatures`](super::dfg::DataFlowGraph::signatures). /// [`func.dfg.signatures`](super::dfg::DataFlowGraph::signatures).
#[derive(Copy, Clone, PartialEq, Eq, Hash)] ///
/// While the order is stable, it is arbitrary.
#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct SigRef(u32); pub struct SigRef(u32);
entity_impl!(SigRef, "sig"); entity_impl!(SigRef, "sig");
@@ -300,7 +321,9 @@ impl SigRef {
/// [`heap_addr`](super::InstBuilder::heap_addr). /// [`heap_addr`](super::InstBuilder::heap_addr).
/// ///
/// To create a heap, use [`FunctionBuilder::create_heap`](https://docs.rs/cranelift-frontend/*/cranelift_frontend/struct.FunctionBuilder.html#method.create_heap). /// To create a heap, use [`FunctionBuilder::create_heap`](https://docs.rs/cranelift-frontend/*/cranelift_frontend/struct.FunctionBuilder.html#method.create_heap).
#[derive(Copy, Clone, PartialEq, Eq, Hash)] ///
/// While the order is stable, it is arbitrary.
#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct Heap(u32); pub struct Heap(u32);
entity_impl!(Heap, "heap"); entity_impl!(Heap, "heap");
@@ -324,7 +347,9 @@ impl Heap {
/// They can be created with [`FuncEnvironment::make_table`](https://docs.rs/cranelift-wasm/*/cranelift_wasm/trait.FuncEnvironment.html#tymethod.make_table). /// They can be created with [`FuncEnvironment::make_table`](https://docs.rs/cranelift-wasm/*/cranelift_wasm/trait.FuncEnvironment.html#tymethod.make_table).
/// They can be used with /// They can be used with
/// [`FuncEnvironment::translate_call_indirect`](https://docs.rs/cranelift-wasm/*/cranelift_wasm/trait.FuncEnvironment.html#tymethod.translate_call_indirect). /// [`FuncEnvironment::translate_call_indirect`](https://docs.rs/cranelift-wasm/*/cranelift_wasm/trait.FuncEnvironment.html#tymethod.translate_call_indirect).
#[derive(Copy, Clone, PartialEq, Eq, Hash)] ///
/// While the order is stable, it is arbitrary.
#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct Table(u32); pub struct Table(u32);
entity_impl!(Table, "table"); entity_impl!(Table, "table");
@@ -342,7 +367,7 @@ impl Table {
} }
/// An opaque reference to any of the entities defined in this module that can appear in CLIF IR. /// An opaque reference to any of the entities defined in this module that can appear in CLIF IR.
#[derive(Copy, Clone, PartialEq, Eq, Hash)] #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub enum AnyEntity { pub enum AnyEntity {
/// The whole function. /// The whole function.
Function, Function,