============ initial translation from Move ================ [variant baseline] fun TestLiveVars::test1($t0|r_ref: &TestLiveVars::R): u64 { var $t1|x_ref: &u64 var $t2: &TestLiveVars::R var $t3: &u64 var $t4: &u64 var $t5: u64 0: $t2 := move($t0) 1: $t3 := borrow_field.x($t2) 2: $t1 := $t3 3: $t4 := move($t1) 4: $t5 := read_ref($t4) 5: return $t5 } [variant baseline] fun TestLiveVars::test2($t0|b: bool): u64 { var $t1|r1: TestLiveVars::R var $t2|r2: TestLiveVars::R var $t3|r_ref: &TestLiveVars::R var $t4: u64 var $t5: TestLiveVars::R var $t6: u64 var $t7: TestLiveVars::R var $t8: &TestLiveVars::R var $t9: bool var $t10: &TestLiveVars::R var $t11: &TestLiveVars::R var $t12: &TestLiveVars::R var $t13: u64 0: $t4 := 3 1: $t5 := pack TestLiveVars::R($t4) 2: $t1 := $t5 3: $t6 := 4 4: $t7 := pack TestLiveVars::R($t6) 5: $t2 := $t7 6: $t8 := borrow_local($t1) 7: $t3 := $t8 8: $t9 := move($t0) 9: if ($t9) goto 10 else goto 16 10: label L0 11: $t10 := move($t3) 12: destroy($t10) 13: $t11 := borrow_local($t2) 14: $t3 := $t11 15: goto 16 16: label L2 17: $t12 := move($t3) 18: $t13 := TestLiveVars::test1($t12) 19: return $t13 } [variant baseline] fun TestLiveVars::test3($t0|n: u64, $t1|r_ref: &TestLiveVars::R): u64 { var $t2|r1: TestLiveVars::R var $t3|r2: TestLiveVars::R var $t4: u64 var $t5: TestLiveVars::R var $t6: u64 var $t7: TestLiveVars::R var $t8: u64 var $t9: u64 var $t10: bool var $t11: &TestLiveVars::R var $t12: u64 var $t13: u64 var $t14: u64 var $t15: u64 var $t16: bool var $t17: &TestLiveVars::R var $t18: &TestLiveVars::R var $t19: u64 var $t20: u64 var $t21: u64 var $t22: &TestLiveVars::R var $t23: u64 0: $t4 := 3 1: $t5 := pack TestLiveVars::R($t4) 2: $t2 := $t5 3: $t6 := 4 4: $t7 := pack TestLiveVars::R($t6) 5: $t3 := $t7 6: goto 7 7: label L7 8: $t8 := 0 9: $t9 := copy($t0) 10: $t10 := <($t8, $t9) 11: if ($t10) goto 12 else goto 35 12: label L0 13: $t11 := move($t1) 14: destroy($t11) 15: $t12 := copy($t0) 16: $t13 := 2 17: $t14 := /($t12, $t13) 18: $t15 := 0 19: $t16 := ==($t14, $t15) 20: if ($t16) goto 21 else goto 25 21: label L3 22: $t17 := borrow_local($t2) 23: $t1 := $t17 24: goto 29 25: label L5 26: $t18 := borrow_local($t3) 27: $t1 := $t18 28: goto 29 29: label L6 30: $t19 := move($t0) 31: $t20 := 1 32: $t21 := -($t19, $t20) 33: $t0 := $t21 34: goto 7 35: label L2 36: $t22 := move($t1) 37: $t23 := TestLiveVars::test1($t22) 38: return $t23 } ============ after pipeline `livevar` ================ [variant baseline] fun TestLiveVars::test1($t0|r_ref: TestLiveVars::R): u64 { var $t1|x_ref: u64 var $t2: u64 # live vars: r_ref 0: $t2 := get_field.x($t0) # live vars: $t2 1: return $t2 } [variant baseline] fun TestLiveVars::test2($t0|b: bool): u64 { var $t1|r1: TestLiveVars::R var $t2|r2: TestLiveVars::R var $t3|r_ref: TestLiveVars::R var $t4: u64 var $t5: TestLiveVars::R var $t6: u64 var $t7: TestLiveVars::R var $t8: u64 # live vars: b 0: $t4 := 3 # live vars: b, $t4 1: $t5 := pack TestLiveVars::R($t4) # live vars: b, $t5 2: $t6 := 4 # live vars: b, $t5, $t6 3: $t7 := pack TestLiveVars::R($t6) # live vars: b, $t5, $t7 4: $t3 := $t5 # live vars: b, r_ref, $t7 5: if ($t0) goto 6 else goto 8 # live vars: $t7 6: label L0 # live vars: $t7 7: $t3 := $t7 # live vars: r_ref 8: label L2 # live vars: r_ref 9: $t8 := TestLiveVars::test1($t3) # live vars: $t8 10: return $t8 } [variant baseline] fun TestLiveVars::test3($t0|n: u64, $t1|r_ref: TestLiveVars::R): u64 { var $t2|r1: TestLiveVars::R var $t3|r2: TestLiveVars::R var $t4: u64 var $t5: TestLiveVars::R var $t6: u64 var $t7: TestLiveVars::R var $t8: u64 var $t9: bool var $t10: u64 var $t11: u64 var $t12: u64 var $t13: bool var $t14: u64 var $t15: u64 # live vars: n, r_ref 0: $t4 := 3 # live vars: n, r_ref, $t4 1: $t5 := pack TestLiveVars::R($t4) # live vars: n, r_ref, $t5 2: $t6 := 4 # live vars: n, r_ref, $t5, $t6 3: $t7 := pack TestLiveVars::R($t6) # live vars: n, r_ref, $t5, $t7 4: label L7 # live vars: n, r_ref, $t5, $t7 5: $t8 := 0 # live vars: n, r_ref, $t5, $t7, $t8 6: $t9 := <($t8, $t0) # live vars: n, r_ref, $t5, $t7, $t9 7: if ($t9) goto 8 else goto 23 # live vars: n, $t5, $t7 8: label L0 # live vars: n, $t5, $t7 9: $t10 := 2 # live vars: n, $t5, $t7, $t10 10: $t11 := /($t0, $t10) # live vars: n, $t5, $t7, $t11 11: $t12 := 0 # live vars: n, $t5, $t7, $t11, $t12 12: $t13 := ==($t11, $t12) # live vars: n, $t5, $t7, $t13 13: if ($t13) goto 14 else goto 17 # live vars: n, $t5, $t7 14: label L3 # live vars: n, $t5, $t7 15: $t1 := $t5 # live vars: n, r_ref, $t5, $t7 16: goto 19 # live vars: n, $t5, $t7 17: label L5 # live vars: n, $t5, $t7 18: $t1 := $t7 # live vars: n, r_ref, $t5, $t7 19: label L6 # live vars: n, r_ref, $t5, $t7 20: $t14 := 1 # live vars: n, r_ref, $t5, $t7, $t14 21: $t0 := -($t0, $t14) # live vars: n, r_ref, $t5, $t7 22: goto 4 # live vars: r_ref 23: label L2 # live vars: r_ref 24: $t15 := TestLiveVars::test1($t1) # live vars: $t15 25: return $t15 }