misc API updates
This commit is contained in:
parent
eaa1f76ba0
commit
fd748dd493
|
@ -190,14 +190,10 @@ impl<'a> Display for ModuleDisplay<'a> {
|
|||
for seg in &memory_data.segments {
|
||||
writeln!(
|
||||
f,
|
||||
" {} offset {}: [{}]",
|
||||
" {} offset {}: # {} bytes",
|
||||
memory,
|
||||
seg.offset,
|
||||
seg.data
|
||||
.iter()
|
||||
.map(|&byte| format!("0x{:02x}", byte))
|
||||
.collect::<Vec<_>>()
|
||||
.join(", ")
|
||||
seg.data.len()
|
||||
)?;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,6 +31,28 @@ impl<'a> FuncDecl<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn optimize(&mut self) {
|
||||
match self {
|
||||
FuncDecl::Body(_, body) => {
|
||||
let cfg = crate::cfg::CFGInfo::new(body);
|
||||
crate::passes::basic_opt::gvn(body, &cfg);
|
||||
crate::passes::resolve_aliases::run(body);
|
||||
crate::passes::empty_blocks::run(body);
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn convert_to_max_ssa(&mut self) {
|
||||
match self {
|
||||
FuncDecl::Body(_, body) => {
|
||||
let cfg = crate::cfg::CFGInfo::new(body);
|
||||
crate::passes::maxssa::run(body, &cfg);
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn body(&self) -> Option<&FunctionBody> {
|
||||
match self {
|
||||
FuncDecl::Body(_, body) => Some(body),
|
||||
|
|
|
@ -236,14 +236,14 @@ impl<'a> Module<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn expand_func<'b>(&'b mut self, id: Func) -> Result<&'b FuncDecl<'a>> {
|
||||
pub fn expand_func<'b>(&'b mut self, id: Func) -> Result<&'b mut FuncDecl<'a>> {
|
||||
if let FuncDecl::Lazy(..) = self.funcs[id] {
|
||||
// End the borrow. This is cheap (a slice copy).
|
||||
let mut func = self.funcs[id].clone();
|
||||
func.parse(self)?;
|
||||
self.funcs[id] = func;
|
||||
}
|
||||
Ok(&self.funcs[id])
|
||||
Ok(&mut self.funcs[id])
|
||||
}
|
||||
|
||||
pub fn expand_all_funcs(&mut self) -> Result<()> {
|
||||
|
@ -254,22 +254,6 @@ impl<'a> Module<'a> {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
pub fn optimize(&mut self) {
|
||||
self.per_func_body(|body| {
|
||||
let cfg = crate::cfg::CFGInfo::new(body);
|
||||
crate::passes::basic_opt::gvn(body, &cfg);
|
||||
crate::passes::resolve_aliases::run(body);
|
||||
crate::passes::empty_blocks::run(body);
|
||||
});
|
||||
}
|
||||
|
||||
pub fn convert_to_max_ssa(&mut self) {
|
||||
self.per_func_body(|body| {
|
||||
let cfg = crate::cfg::CFGInfo::new(body);
|
||||
crate::passes::maxssa::run(body, &cfg);
|
||||
});
|
||||
}
|
||||
|
||||
pub fn display<'b>(&'b self) -> ModuleDisplay<'b>
|
||||
where
|
||||
'b: 'a,
|
||||
|
|
Loading…
Reference in a new issue