1
0
Fork 0
mirror of synced 2025-09-23 12:18:44 +00:00

fold assignee in shallow ssa

This commit is contained in:
dark64 2022-12-27 16:10:20 +01:00
parent 2afdbcb47b
commit f72c210a4f

View file

@ -121,6 +121,16 @@ impl<'ast, 'a> ShallowTransformer<'ast, 'a> {
fold_function(self, f)
}
fn fold_assignee<T: Field>(&mut self, a: TypedAssignee<'ast, T>) -> TypedAssignee<'ast, T> {
match a {
TypedAssignee::Identifier(v) => {
let v = self.issue_next_ssa_variable(v);
TypedAssignee::Identifier(self.fold_variable(v))
}
a => fold_assignee(self, a),
}
}
}
impl<'ast, 'a, T: Field> Folder<'ast, T> for ShallowTransformer<'ast, 'a> {
@ -131,13 +141,7 @@ impl<'ast, 'a, T: Field> Folder<'ast, T> for ShallowTransformer<'ast, 'a> {
match s {
TypedAssemblyStatement::Assignment(a, e) => {
let e = self.fold_expression(e);
let a = match a {
TypedAssignee::Identifier(v) => {
let v = self.issue_next_ssa_variable(v);
TypedAssignee::Identifier(self.fold_variable(v))
}
a => fold_assignee(self, a),
};
let a = self.fold_assignee(a);
vec![TypedAssemblyStatement::Assignment(a, e)]
}
s => fold_assembly_statement(self, s),
@ -147,26 +151,12 @@ impl<'ast, 'a, T: Field> Folder<'ast, T> for ShallowTransformer<'ast, 'a> {
match s {
TypedStatement::Definition(a, DefinitionRhs::Expression(e)) => {
let e = self.fold_expression(e);
let a = match a {
TypedAssignee::Identifier(v) => {
let v = self.issue_next_ssa_variable(v);
TypedAssignee::Identifier(self.fold_variable(v))
}
a => fold_assignee(self, a),
};
let a = self.fold_assignee(a);
vec![TypedStatement::definition(a, e)]
}
TypedStatement::Definition(assignee, DefinitionRhs::EmbedCall(embed_call)) => {
let assignee = match assignee {
TypedAssignee::Identifier(v) => {
let v = self.issue_next_ssa_variable(v);
TypedAssignee::Identifier(self.fold_variable(v))
}
a => fold_assignee(self, a),
};
let embed_call = self.fold_embed_call(embed_call);
let assignee = self.fold_assignee(assignee);
vec![TypedStatement::embed_call_definition(assignee, embed_call)]
}
TypedStatement::For(v, from, to, stats) => {