Move IR modules under repr/.

Use the cretonne::repr module as a common namespace for sub-modules defining the
in-memory representation of Cretonn IL.
This commit is contained in:
Jakob Stoklund Olesen
2016-07-19 14:10:30 -07:00
parent 6e04ec5df9
commit 89ba9626c7
15 changed files with 46 additions and 45 deletions

View File

@@ -21,8 +21,8 @@
//! and (Ebb0, `jmp Ebb2`) respectively. //! and (Ebb0, `jmp Ebb2`) respectively.
use repr::Function; use repr::Function;
use entities::{Inst, Ebb}; use repr::entities::{Inst, Ebb};
use instructions::InstructionData; use repr::instructions::InstructionData;
use std::collections::{BTreeSet, BTreeMap, btree_map}; use std::collections::{BTreeSet, BTreeMap, btree_map};
/// A basic block denoted by its enclosing Ebb and last instruction. /// A basic block denoted by its enclosing Ebb and last instruction.

View File

@@ -7,14 +7,7 @@
pub const VERSION: &'static str = env!("CARGO_PKG_VERSION"); pub const VERSION: &'static str = env!("CARGO_PKG_VERSION");
pub mod types;
pub mod condcodes;
pub mod immediates;
pub mod entities;
pub mod instructions;
pub mod repr; pub mod repr;
pub mod dfg;
pub mod layout;
pub mod write; pub mod write;
pub mod cfg; pub mod cfg;

View File

@@ -1,9 +1,9 @@
//! Data flow graph tracking Instructions, Values, and EBBs. //! Data flow graph tracking Instructions, Values, and EBBs.
use entity_map::EntityMap; use entity_map::EntityMap;
use entities::{Ebb, Inst, Value, NO_VALUE, ExpandedValue}; use repr::entities::{Ebb, Inst, Value, NO_VALUE, ExpandedValue};
use instructions::InstructionData; use repr::instructions::InstructionData;
use types::Type; use repr::types::Type;
use std::ops::{Index, IndexMut}; use std::ops::{Index, IndexMut};
use std::u16; use std::u16;
@@ -57,7 +57,7 @@ impl DataFlowGraph {
/// Get the type of a value. /// Get the type of a value.
pub fn value_type(&self, v: Value) -> Type { pub fn value_type(&self, v: Value) -> Type {
use entities::ExpandedValue::*; use repr::entities::ExpandedValue::*;
match v.expand() { match v.expand() {
Direct(i) => self.insts[i].first_type(), Direct(i) => self.insts[i].first_type(),
Table(i) => { Table(i) => {
@@ -75,7 +75,7 @@ impl DataFlowGraph {
/// This is either the instruction that defined it or the Ebb that has the value as an /// This is either the instruction that defined it or the Ebb that has the value as an
/// argument. /// argument.
pub fn value_def(&self, v: Value) -> ValueDef { pub fn value_def(&self, v: Value) -> ValueDef {
use entities::ExpandedValue::*; use repr::entities::ExpandedValue::*;
match v.expand() { match v.expand() {
Direct(inst) => ValueDef::Res(inst, 0), Direct(inst) => ValueDef::Res(inst, 0),
Table(idx) => { Table(idx) => {
@@ -339,8 +339,8 @@ impl EbbData {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use types; use repr::types;
use instructions::{Opcode, InstructionData}; use repr::instructions::{Opcode, InstructionData};
#[test] #[test]
fn make_inst() { fn make_inst() {

View File

@@ -10,10 +10,10 @@ use std::fmt::{self, Display, Formatter};
use std::str::FromStr; use std::str::FromStr;
use std::ops::{Deref, DerefMut}; use std::ops::{Deref, DerefMut};
use entities::*; use repr::entities::*;
use immediates::*; use repr::immediates::*;
use condcodes::*; use repr::condcodes::*;
use types::{self, Type}; use repr::types::{self, Type};
// Include code generated by `meta/gen_instr.py`. This file contains: // Include code generated by `meta/gen_instr.py`. This file contains:
// //
@@ -560,7 +560,7 @@ mod tests {
#[test] #[test]
fn value_set() { fn value_set() {
use types::*; use repr::types::*;
let vts = ValueTypeSet { let vts = ValueTypeSet {
allow_scalars: true, allow_scalars: true,

View File

@@ -5,7 +5,7 @@
use std::iter::{Iterator, IntoIterator}; use std::iter::{Iterator, IntoIterator};
use entity_map::{EntityMap, EntityRef}; use entity_map::{EntityMap, EntityRef};
use entities::{Ebb, NO_EBB, Inst, NO_INST}; use repr::entities::{Ebb, NO_EBB, Inst, NO_INST};
/// The `Layout` struct determines the layout of EBBs and instructions in a function. It does not /// The `Layout` struct determines the layout of EBBs and instructions in a function. It does not
/// contain definitions of instructions or EBBs, but depends on `Inst` and `Ebb` entity references /// contain definitions of instructions or EBBs, but depends on `Inst` and `Ebb` entity references
@@ -242,7 +242,7 @@ impl<'a> Iterator for Insts<'a> {
mod tests { mod tests {
use super::Layout; use super::Layout;
use entity_map::EntityRef; use entity_map::EntityRef;
use entities::{Ebb, Inst}; use repr::entities::{Ebb, Inst};
#[test] #[test]
fn append_ebb() { fn append_ebb() {

View File

@@ -1,10 +1,18 @@
//! Representation of Cretonne IL functions. //! Representation of Cretonne IL functions.
use types::{FunctionName, Signature}; pub mod entities;
pub mod types;
pub mod condcodes;
pub mod immediates;
pub mod instructions;
pub mod dfg;
pub mod layout;
use repr::types::{FunctionName, Signature};
use entity_map::EntityRef; use entity_map::EntityRef;
use entities::{Ebb, NO_EBB, StackSlot}; use repr::entities::{Ebb, NO_EBB, StackSlot};
use dfg::DataFlowGraph; use repr::dfg::DataFlowGraph;
use layout::Layout; use repr::layout::Layout;
use std::fmt::{self, Debug, Display, Formatter}; use std::fmt::{self, Debug, Display, Formatter};
use std::ops::Index; use std::ops::Index;

View File

@@ -1,9 +1,9 @@
//! Helper functions for generating dummy instructions. //! Helper functions for generating dummy instructions.
use repr::Function; use repr::Function;
use entities::{Ebb, Inst, NO_VALUE}; use repr::entities::{Ebb, Inst, NO_VALUE};
use instructions::{InstructionData, Opcode, VariableArgs, JumpData, BranchData}; use repr::instructions::{InstructionData, Opcode, VariableArgs, JumpData, BranchData};
use types; use repr::types;
pub fn jump(func: &mut Function, dest: Ebb) -> Inst { pub fn jump(func: &mut Function, dest: Ebb) -> Inst {
func.dfg.make_inst(InstructionData::Jump { func.dfg.make_inst(InstructionData::Jump {

View File

@@ -6,8 +6,8 @@
use std::io::{self, Write}; use std::io::{self, Write};
use repr::Function; use repr::Function;
use entities::{Inst, Ebb, Value}; use repr::entities::{Inst, Ebb, Value};
use types::Type; use repr::types::Type;
pub type Result = io::Result<()>; pub type Result = io::Result<()>;
@@ -182,7 +182,7 @@ pub fn write_instruction(w: &mut Write, func: &Function, inst: Inst) -> Result {
} }
// Then the operands, depending on format. // Then the operands, depending on format.
use instructions::InstructionData::*; use repr::instructions::InstructionData::*;
match func.dfg[inst] { match func.dfg[inst] {
Nullary { .. } => writeln!(w, ""), Nullary { .. } => writeln!(w, ""),
Unary { arg, .. } => writeln!(w, " {}", arg), Unary { arg, .. } => writeln!(w, " {}", arg),
@@ -218,7 +218,7 @@ mod tests {
use super::*; use super::*;
use super::{needs_quotes, escaped}; use super::{needs_quotes, escaped};
use repr::{Function, StackSlotData}; use repr::{Function, StackSlotData};
use types; use repr::types;
#[test] #[test]
fn quoting() { fn quoting() {

View File

@@ -6,8 +6,8 @@
// ====--------------------------------------------------------------------------------------====// // ====--------------------------------------------------------------------------------------====//
use std::str::CharIndices; use std::str::CharIndices;
use cretonne::types; use cretonne::repr::types;
use cretonne::entities::{Value, Ebb}; use cretonne::repr::entities::{Value, Ebb};
/// The location of a `Token` or `Error`. /// The location of a `Token` or `Error`.
#[derive(Debug, Clone, Copy, PartialEq, Eq)] #[derive(Debug, Clone, Copy, PartialEq, Eq)]
@@ -373,8 +373,8 @@ impl<'a> Lexer<'a> {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use cretonne::types; use cretonne::repr::types;
use cretonne::entities::{Value, Ebb}; use cretonne::repr::entities::{Value, Ebb};
fn token<'a>(token: Token<'a>, line: usize) -> Option<Result<LocatedToken<'a>, LocatedError>> { fn token<'a>(token: Token<'a>, line: usize) -> Option<Result<LocatedToken<'a>, LocatedError>> {
Some(super::token(token, Location { line_number: line })) Some(super::token(token, Location { line_number: line }))

View File

@@ -11,11 +11,11 @@ use std::fmt::{self, Display, Formatter};
use std::str::FromStr; use std::str::FromStr;
use std::u32; use std::u32;
use lexer::{self, Lexer, Token}; use lexer::{self, Lexer, Token};
use cretonne::types::{Type, VOID, FunctionName, Signature, ArgumentType, ArgumentExtension}; use cretonne::repr::types::{Type, VOID, FunctionName, Signature, ArgumentType, ArgumentExtension};
use cretonne::immediates::{Imm64, Ieee32, Ieee64}; use cretonne::repr::immediates::{Imm64, Ieee32, Ieee64};
use cretonne::entities::*; use cretonne::repr::entities::*;
use cretonne::instructions::{Opcode, InstructionFormat, InstructionData, VariableArgs, JumpData, use cretonne::repr::instructions::{Opcode, InstructionFormat, InstructionData, VariableArgs,
BranchData, ReturnData}; JumpData, BranchData, ReturnData};
use cretonne::repr::{Function, StackSlotData}; use cretonne::repr::{Function, StackSlotData};
pub use lexer::Location; pub use lexer::Location;
@@ -1039,7 +1039,7 @@ impl<'a> Parser<'a> {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use cretonne::types::{self, ArgumentType, ArgumentExtension}; use cretonne::repr::types::{self, ArgumentType, ArgumentExtension};
#[test] #[test]
fn argument_type() { fn argument_type() {

View File

@@ -8,7 +8,7 @@ use std::io::{Read, Write, stdout};
use CommandResult; use CommandResult;
use cretonne::repr::Function; use cretonne::repr::Function;
use cretonne::cfg::ControlFlowGraph; use cretonne::cfg::ControlFlowGraph;
use cretonne::instructions::InstructionData; use cretonne::repr::instructions::InstructionData;
use cton_reader::parser::Parser; use cton_reader::parser::Parser;
pub fn run(files: Vec<String>) -> CommandResult { pub fn run(files: Vec<String>) -> CommandResult {