use crate::ir::tir::TIROp;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum EdgeKind {
DataDep,
ControlFlow,
MemOrder,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum FieldType {
BFE,
XFE,
Unknown,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[repr(u8)]
pub enum OpKind {
Call = 0,
Return = 1,
Halt = 2,
IfElse = 3,
IfOnly = 4,
Loop = 5,
FnStart = 6,
FnEnd = 7,
Entry = 8,
Comment = 9,
Asm = 10,
Push = 11,
Pop = 12,
Dup = 13,
Swap = 14,
Add = 15,
Sub = 16,
Mul = 17,
Neg = 18,
Invert = 19,
Eq = 20,
Lt = 21,
And = 22,
Or = 23,
Xor = 24,
PopCount = 25,
Split = 26,
DivMod = 27,
Shl = 28,
Shr = 29,
Log2 = 30,
Pow = 31,
ReadIo = 32,
WriteIo = 33,
ReadMem = 34,
WriteMem = 35,
Assert = 36,
Hash = 37,
Reveal = 38,
Seal = 39,
RamRead = 40,
RamWrite = 41,
Hint = 42,
SpongeInit = 43,
SpongeAbsorb = 44,
SpongeSqueeze = 45,
SpongeLoad = 46,
MerkleStep = 47,
MerkleLoad = 48,
ExtMul = 49,
ExtInvert = 50,
FoldExt = 51,
FoldBase = 52,
ProofBlock = 53,
}
pub const NUM_OP_KINDS: usize = 54;
impl OpKind {
pub fn from_tir_op(op: &TIROp) -> Self {
match op {
TIROp::Call(_) => OpKind::Call,
TIROp::Return => OpKind::Return,
TIROp::Halt => OpKind::Halt,
TIROp::IfElse { .. } => OpKind::IfElse,
TIROp::IfOnly { .. } => OpKind::IfOnly,
TIROp::Loop { .. } => OpKind::Loop,
TIROp::FnStart(_) => OpKind::FnStart,
TIROp::FnEnd => OpKind::FnEnd,
TIROp::Entry(_) => OpKind::Entry,
TIROp::Comment(_) => OpKind::Comment,
TIROp::Asm { .. } => OpKind::Asm,
TIROp::Push(_) => OpKind::Push,
TIROp::Pop(_) => OpKind::Pop,
TIROp::Dup(_) => OpKind::Dup,
TIROp::Swap(_) => OpKind::Swap,
TIROp::Add => OpKind::Add,
TIROp::Sub => OpKind::Sub,
TIROp::Mul => OpKind::Mul,
TIROp::Neg => OpKind::Neg,
TIROp::Invert => OpKind::Invert,
TIROp::Eq => OpKind::Eq,
TIROp::Lt => OpKind::Lt,
TIROp::And => OpKind::And,
TIROp::Or => OpKind::Or,
TIROp::Xor => OpKind::Xor,
TIROp::PopCount => OpKind::PopCount,
TIROp::Split => OpKind::Split,
TIROp::DivMod => OpKind::DivMod,
TIROp::Shl => OpKind::Shl,
TIROp::Shr => OpKind::Shr,
TIROp::Log2 => OpKind::Log2,
TIROp::Pow => OpKind::Pow,
TIROp::ReadIo(_) => OpKind::ReadIo,
TIROp::WriteIo(_) => OpKind::WriteIo,
TIROp::ReadMem(_) => OpKind::ReadMem,
TIROp::WriteMem(_) => OpKind::WriteMem,
TIROp::Assert(_) => OpKind::Assert,
TIROp::Hash { .. } => OpKind::Hash,
TIROp::Reveal { .. } => OpKind::Reveal,
TIROp::Seal { .. } => OpKind::Seal,
TIROp::RamRead { .. } => OpKind::RamRead,
TIROp::RamWrite { .. } => OpKind::RamWrite,
TIROp::Hint(_) => OpKind::Hint,
TIROp::SpongeInit => OpKind::SpongeInit,
TIROp::SpongeAbsorb => OpKind::SpongeAbsorb,
TIROp::SpongeSqueeze => OpKind::SpongeSqueeze,
TIROp::SpongeLoad => OpKind::SpongeLoad,
TIROp::MerkleStep => OpKind::MerkleStep,
TIROp::MerkleLoad => OpKind::MerkleLoad,
TIROp::ExtMul => OpKind::ExtMul,
TIROp::ExtInvert => OpKind::ExtInvert,
TIROp::FoldExt => OpKind::FoldExt,
TIROp::FoldBase => OpKind::FoldBase,
TIROp::ProofBlock { .. } => OpKind::ProofBlock,
}
}
}