Pseudocode: Introduce pseudo-value analysis

This commit is contained in:
Alexey Sedunov
2014-05-12 17:42:44 +04:00
parent 3ce96671d9
commit d2c055e9da
103 changed files with 2417 additions and 1432 deletions
@@ -20,63 +20,68 @@ fun lazyBooleans(a : Boolean, b : Boolean) : Unit {
L0:
1 <START>
v(a : Boolean)
w(a)
magic(a : Boolean) -> <v0>
w(a|<v0>)
v(b : Boolean)
w(b)
magic(b : Boolean) -> <v1>
w(b|<v1>)
2 mark({ if (a) { 1 } else { 2 } 3 if (a && b) 5 else 6 7 if (a || b) 8 else 9 10 if (a) 11 12 if (a) else 13 14 })
mark(if (a) { 1 } else { 2 })
r(a)
jf(L2) NEXT:[mark({ 2 }), mark({ 1 })]
r(a) -> <v2>
jf(L2|<v2>) NEXT:[mark({ 2 }), mark({ 1 })]
3 mark({ 1 })
r(1)
2 jmp(L3) NEXT:[r(3)]
r(1) -> <v3>
2 jmp(L3) NEXT:[magic(if (a) { 1 } else { 2 }|<v3>, <v4>) -> <v5>]
L2:
3 mark({ 2 }) PREV:[jf(L2)]
r(2)
3 mark({ 2 }) PREV:[jf(L2|<v2>)]
r(2) -> <v4>
L3:
2 r(3) PREV:[jmp(L3), r(2)]
2 magic(if (a) { 1 } else { 2 }|<v3>, <v4>) -> <v5> PREV:[jmp(L3), r(2) -> <v4>]
r(3) -> <v6>
mark(if (a && b) 5 else 6)
r(a)
jf(L4) NEXT:[jf(L5), r(b)]
r(b)
r(a) -> <v7>
jf(L4|<v7>) NEXT:[jf(L5), r(b) -> <v8>]
r(b) -> <v8>
L4:
jf(L5) NEXT:[r(6), r(5)] PREV:[jf(L4), r(b)]
r(5)
jmp(L6) NEXT:[r(7)]
jf(L5) NEXT:[r(6) -> <v10>, r(5) -> <v9>] PREV:[jf(L4|<v7>), r(b) -> <v8>]
r(5) -> <v9>
jmp(L6) NEXT:[magic(if (a && b) 5 else 6|<v9>, <v10>) -> <v11>]
L5:
r(6) PREV:[jf(L5)]
r(6) -> <v10> PREV:[jf(L5)]
L6:
r(7) PREV:[jmp(L6), r(6)]
magic(if (a && b) 5 else 6|<v9>, <v10>) -> <v11> PREV:[jmp(L6), r(6) -> <v10>]
r(7) -> <v12>
mark(if (a || b) 8 else 9)
r(a)
jt(L7) NEXT:[r(b), jf(L8)]
r(b)
r(a) -> <v13>
jt(L7|<v13>) NEXT:[r(b) -> <v14>, jf(L8)]
r(b) -> <v14>
L7:
jf(L8) NEXT:[r(9), r(8)] PREV:[jt(L7), r(b)]
r(8)
jmp(L9) NEXT:[r(10)]
jf(L8) NEXT:[r(9) -> <v16>, r(8) -> <v15>] PREV:[jt(L7|<v13>), r(b) -> <v14>]
r(8) -> <v15>
jmp(L9) NEXT:[magic(if (a || b) 8 else 9|<v15>, <v16>) -> <v17>]
L8:
r(9) PREV:[jf(L8)]
r(9) -> <v16> PREV:[jf(L8)]
L9:
r(10) PREV:[jmp(L9), r(9)]
magic(if (a || b) 8 else 9|<v15>, <v16>) -> <v17> PREV:[jmp(L9), r(9) -> <v16>]
r(10) -> <v18>
mark(if (a) 11)
r(a)
jf(L10) NEXT:[read (Unit), r(11)]
r(11)
jmp(L11) NEXT:[r(12)]
r(a) -> <v19>
jf(L10|<v19>) NEXT:[read (Unit), r(11) -> <v20>]
r(11) -> <v20>
jmp(L11) NEXT:[r(12) -> <v21>]
L10:
read (Unit) PREV:[jf(L10)]
read (Unit) PREV:[jf(L10|<v19>)]
L11:
r(12) PREV:[jmp(L11), read (Unit)]
r(12) -> <v21> PREV:[jmp(L11), read (Unit)]
mark(if (a) else 13)
r(a)
jf(L12) NEXT:[r(13), read (Unit)]
r(a) -> <v22>
jf(L12|<v22>) NEXT:[r(13) -> <v23>, read (Unit)]
read (Unit)
jmp(L13) NEXT:[r(14)]
jmp(L13) NEXT:[r(14) -> <v24>]
L12:
r(13) PREV:[jf(L12)]
r(13) -> <v23> PREV:[jf(L12|<v22>)]
L13:
r(14) PREV:[jmp(L13), r(13)]
r(14) -> <v24> PREV:[jmp(L13), r(13) -> <v23>]
L1:
1 <END> NEXT:[<SINK>]
error: