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

extend example, add doc

This commit is contained in:
schaeff 2020-01-21 15:39:24 +01:00
parent 76a2127120
commit 7305cf99f0
3 changed files with 20 additions and 5 deletions

View file

@ -1,5 +1,11 @@
//! Module containing constant propagation for the typed AST
//!
//! On top of the usual behavior of removing statements which assign a constant to a variable (as the variable can simply be
//! substituted for the constant whenever used), we provide a `verbose` mode which does not remove such statements. This is done
//! as for partial passes which do not visit the whole program, the variables being defined may be be used in parts of the program
//! that are not visited. Keeping the statements is semantically equivalent and enables rebuilding the set of constants at the
//! next pass.
//!
//! @file propagation.rs
//! @author Thibaut Schaeffer <thibaut@schaeff.fr>
//! @date 2018
@ -16,7 +22,7 @@ pub struct Propagator<'ast, T: Field> {
// we currently do not support partially constant expressions: `field [x, 1][1]` is not considered constant, `field [0, 1][1]` is
constants: HashMap<TypedAssignee<'ast, T>, TypedExpression<'ast, T>>,
// the verbose mode doesn't remove statements which assign constants to variables
// it required when using propagation in combination with unrolling
// it's required when using propagation in combination with unrolling
verbose: bool,
}

View file

@ -7,7 +7,7 @@
},
"output": {
"Ok": {
"values": ["4838400", "10"]
"values": ["4838400", "10", "25"]
}
}
},
@ -17,7 +17,7 @@
},
"output": {
"Ok": {
"values": ["0", "10"]
"values": ["0", "10", "25"]
}
}
}

View file

@ -1,4 +1,4 @@
def main(field[4] values) -> (field, field):
def main(field[4] values) -> (field, field, field):
field res0 = 1
field res1 = 0
@ -15,4 +15,13 @@ def main(field[4] values) -> (field, field):
res1 = res1 + 1
endfor
return res0, res1
field res2 = 0
field i = 0
for field i in i..5 do
i = 5
for field i in 0..i do
res2 = res2 + 1
endfor
endfor
return res0, res1, res2