40 lines
1.1 KiB
Rust
40 lines
1.1 KiB
Rust
use crate::ir::ir_add::IrAdd;
|
|
use crate::ir::ir_call::IrCall;
|
|
use crate::ir::ir_expression::IrExpression;
|
|
use crate::ir::ir_variable::{IrVariable, IrVirtualRegisterVariable};
|
|
use std::collections::HashSet;
|
|
use std::fmt::{Display, Formatter};
|
|
use std::rc::Rc;
|
|
|
|
pub enum IrOperation {
|
|
Load(IrExpression),
|
|
Add(IrAdd),
|
|
Call(IrCall),
|
|
}
|
|
|
|
impl Display for IrOperation {
|
|
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
|
match self {
|
|
IrOperation::Load(ir_expression) => {
|
|
write!(f, "{}", ir_expression)
|
|
}
|
|
IrOperation::Add(ir_add) => {
|
|
write!(f, "{}", ir_add)
|
|
}
|
|
IrOperation::Call(ir_call) => {
|
|
write!(f, "{}", ir_call)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
impl IrOperation {
|
|
pub fn vr_uses(&self) -> HashSet<Rc<IrVirtualRegisterVariable>> {
|
|
match self {
|
|
IrOperation::Load(ir_expression) => ir_expression.vr_uses(),
|
|
IrOperation::Add(ir_add) => ir_add.vr_uses(),
|
|
IrOperation::Call(ir_call) => ir_call.vr_uses(),
|
|
}
|
|
}
|
|
}
|