============ initial translation from Move ================ [variant baseline] fun NestedFields::nested_fields_direct($t0|a: &NestedFields::A): address { var $t1: &NestedFields::A var $t2: &NestedFields::B var $t3: &NestedFields::C var $t4: &address var $t5: address 0: $t1 := move($t0) 1: $t2 := borrow_field.b($t1) 2: $t3 := borrow_field.c($t2) 3: $t4 := borrow_field.f($t3) 4: $t5 := read_ref($t4) 5: return $t5 } [variant baseline] fun NestedFields::nested_fields_helper1($t0|c: &NestedFields::C): address { var $t1: &NestedFields::C var $t2: &address var $t3: address 0: $t1 := move($t0) 1: $t2 := borrow_field.f($t1) 2: $t3 := read_ref($t2) 3: return $t3 } [variant baseline] fun NestedFields::nested_fields_helper2($t0|b: &NestedFields::B): address { var $t1: &NestedFields::B var $t2: &NestedFields::C var $t3: &address var $t4: address 0: $t1 := move($t0) 1: $t2 := borrow_field.c($t1) 2: $t3 := borrow_field.f($t2) 3: $t4 := read_ref($t3) 4: return $t4 } [variant baseline] fun NestedFields::nested_fields_interproc($t0|a1: &NestedFields::A, $t1|a2: &NestedFields::A, $t2|flag: bool): address { var $t3|tmp#$3: address var $t4: bool var $t5: &NestedFields::A var $t6: &NestedFields::A var $t7: &NestedFields::B var $t8: &NestedFields::C var $t9: address var $t10: &NestedFields::A var $t11: &NestedFields::A var $t12: &NestedFields::B var $t13: address var $t14: address 0: $t4 := move($t2) 1: if ($t4) goto 2 else goto 11 2: label L0 3: $t5 := move($t1) 4: destroy($t5) 5: $t6 := move($t0) 6: $t7 := borrow_field.b($t6) 7: $t8 := borrow_field.c($t7) 8: $t9 := NestedFields::nested_fields_helper1($t8) 9: $t3 := $t9 10: goto 19 11: label L2 12: $t10 := move($t0) 13: destroy($t10) 14: $t11 := move($t1) 15: $t12 := borrow_field.b($t11) 16: $t13 := NestedFields::nested_fields_helper2($t12) 17: $t3 := $t13 18: goto 19 19: label L3 20: $t14 := move($t3) 21: return $t14 } ============ after pipeline `read_write_set` ================ [variant baseline] fun NestedFields::nested_fields_direct($t0|a: &NestedFields::A): address { var $t1: &NestedFields::A var $t2: &NestedFields::B var $t3: &NestedFields::C var $t4: &address var $t5: address # Accesses: # Formal(0): Read # Formal(0)/b/c/f: Read # # Locals: # Ret(0): Formal(0)/b/c/f # 0: $t1 := move($t0) 1: $t2 := borrow_field.b($t1) 2: $t3 := borrow_field.c($t2) 3: $t4 := borrow_field.f($t3) 4: $t5 := read_ref($t4) 5: return $t5 } [variant baseline] fun NestedFields::nested_fields_helper1($t0|c: &NestedFields::C): address { var $t1: &NestedFields::C var $t2: &address var $t3: address # Accesses: # Formal(0): Read # Formal(0)/f: Read # # Locals: # Ret(0): Formal(0)/f # 0: $t1 := move($t0) 1: $t2 := borrow_field.f($t1) 2: $t3 := read_ref($t2) 3: return $t3 } [variant baseline] fun NestedFields::nested_fields_helper2($t0|b: &NestedFields::B): address { var $t1: &NestedFields::B var $t2: &NestedFields::C var $t3: &address var $t4: address # Accesses: # Formal(0): Read # Formal(0)/c/f: Read # # Locals: # Ret(0): Formal(0)/c/f # 0: $t1 := move($t0) 1: $t2 := borrow_field.c($t1) 2: $t3 := borrow_field.f($t2) 3: $t4 := read_ref($t3) 4: return $t4 } [variant baseline] fun NestedFields::nested_fields_interproc($t0|a1: &NestedFields::A, $t1|a2: &NestedFields::A, $t2|flag: bool): address { var $t3|tmp#$3: address var $t4: bool var $t5: &NestedFields::A var $t6: &NestedFields::A var $t7: &NestedFields::B var $t8: &NestedFields::C var $t9: address var $t10: &NestedFields::A var $t11: &NestedFields::A var $t12: &NestedFields::B var $t13: address var $t14: address # Accesses: # Formal(0): Read # Formal(0)/b/c: Read # Formal(0)/b/c/f: Read # Formal(1): Read # Formal(1)/b: Read # Formal(1)/b/c/f: Read # Formal(2): Read # # Locals: # Ret(0): {Formal(0)/b/c/f, Formal(1)/b/c/f, } # 0: $t4 := move($t2) 1: if ($t4) goto 2 else goto 11 2: label L0 3: $t5 := move($t1) 4: destroy($t5) 5: $t6 := move($t0) 6: $t7 := borrow_field.b($t6) 7: $t8 := borrow_field.c($t7) 8: $t9 := NestedFields::nested_fields_helper1($t8) 9: $t3 := $t9 10: goto 19 11: label L2 12: $t10 := move($t0) 13: destroy($t10) 14: $t11 := move($t1) 15: $t12 := borrow_field.b($t11) 16: $t13 := NestedFields::nested_fields_helper2($t12) 17: $t3 := $t13 18: goto 19 19: label L3 20: $t14 := move($t3) 21: return $t14 }