Pseudocode: Generate merge instruction regardless of number of branches
This commit is contained in:
@@ -21,12 +21,13 @@ L0:
|
||||
jf(L2|<v4>) NEXT:[read (Unit), mark({ })]
|
||||
3 mark({ })
|
||||
read (Unit)
|
||||
2 jmp(L3) NEXT:[<END>]
|
||||
2 jmp(L3) NEXT:[merge(if (a == b) { }|!<v5>) -> <v6>]
|
||||
L2:
|
||||
read (Unit) PREV:[jf(L2|<v4>)]
|
||||
L1:
|
||||
L3:
|
||||
1 <END> NEXT:[<SINK>] PREV:[jmp(L3), read (Unit)]
|
||||
merge(if (a == b) { }|!<v5>) -> <v6> PREV:[jmp(L3), read (Unit)]
|
||||
L1:
|
||||
1 <END> NEXT:[<SINK>]
|
||||
error:
|
||||
<ERROR> PREV:[]
|
||||
sink:
|
||||
|
||||
@@ -10,6 +10,6 @@ a <v2>: OR{{<: Any}, {<: Any}} NEW: r(a) -> <v2>
|
||||
b <v3>: * NEW: r(b) -> <v3>
|
||||
a == b <v4>: Boolean NEW: call(a == b, equals|<v2>, <v3>) -> <v4>
|
||||
{ } !<v5>: *
|
||||
if (a == b) { } !<v5>: * COPY
|
||||
{ if (a == b) { } } !<v5>: * COPY
|
||||
if (a == b) { } <v6>: * NEW: merge(if (a == b) { }|!<v5>) -> <v6>
|
||||
{ if (a == b) { } } <v6>: * COPY
|
||||
=====================
|
||||
|
||||
@@ -20,12 +20,13 @@ L0:
|
||||
jf(L2|<v4>) NEXT:[read (Unit), mark({})]
|
||||
3 mark({})
|
||||
read (Unit)
|
||||
2 jmp(L3) NEXT:[<END>]
|
||||
2 jmp(L3) NEXT:[merge(if (a != b) {}|!<v5>) -> <v6>]
|
||||
L2:
|
||||
read (Unit) PREV:[jf(L2|<v4>)]
|
||||
L1:
|
||||
L3:
|
||||
1 <END> NEXT:[<SINK>] PREV:[jmp(L3), read (Unit)]
|
||||
merge(if (a != b) {}|!<v5>) -> <v6> PREV:[jmp(L3), read (Unit)]
|
||||
L1:
|
||||
1 <END> NEXT:[<SINK>]
|
||||
error:
|
||||
<ERROR> PREV:[]
|
||||
sink:
|
||||
|
||||
@@ -9,6 +9,6 @@ a <v2>: OR{{<: Any}, {<: Any}} NEW: r(a) -> <v2>
|
||||
b <v3>: * NEW: r(b) -> <v3>
|
||||
a != b <v4>: Boolean NEW: call(a != b, equals|<v2>, <v3>) -> <v4>
|
||||
{} !<v5>: *
|
||||
if (a != b) {} !<v5>: * COPY
|
||||
{ if (a != b) {} } !<v5>: * COPY
|
||||
if (a != b) {} <v6>: * NEW: merge(if (a != b) {}|!<v5>) -> <v6>
|
||||
{ if (a != b) {} } <v6>: * COPY
|
||||
=====================
|
||||
|
||||
Reference in New Issue
Block a user