{
	let a
	let b
	let i := 0
	for {} lt(i, 10) {i := add(a, b)} {
		a := origin()
		b := origin()
		b := caller()
		// a=origin, b=caller
		if callvalue() { break }
		// a=origin, b=caller
		a := caller()
	}
	mstore(a, b)
}
// ----
// step: rematerialiser
//
// {
//     let a
//     let b
//     let i := 0
//     for { } lt(i, 10) { i := add(caller(), caller()) }
//     {
//         a := origin()
//         b := origin()
//         b := caller()
//         if callvalue() { break }
//         a := caller()
//     }
//     mstore(a, b)
// }
