MFP and MOP
MFP and MOP
MFP(Maximal Fixed Point)是在运行过程中沿着数据流反复迭代。
M
F
P
=
F
(
x
⊔
y
)
MFP = F(x ⊔ y)
MFP=F(x⊔y)
MOP(Meet Over all Paths)是找出从开头到结尾所有路径,分别进行传递函数计算,最后将算完的所有路径进行⊔/⊓。
M
O
P
=
F
(
x
)
⊔
F
(
y
)
MOP = F(x) ⊔ F(y)
MOP=F(x)⊔F(y)
如上图,则MFP为:
I
N
[
S
4
]
=
f
3
(
f
1
(
O
U
T
[
E
n
t
r
y
]
)
⊔
(
f
2
(
O
U
T
[
E
n
t
r
y
]
)
)
IN[S4] = f_{3}(f_{1}(OUT[Entry]) ⊔ (f_{2}(OUT[Entry]))
IN[S4]=f3(f1(OUT[Entry])⊔(f2(OUT[Entry]))
MOP为:
I
N
[
S
4
]
=
f
3
(
f
1
(
O
U
T
[
E
n
t
r
y
]
)
)
⊔
f
3
(
(
f
2
(
O
U
T
[
E
n
t
r
y
]
)
)
IN[S4] = f_{3}(f_{1}(OUT[Entry])) ⊔ f_{3}((f_{2}(OUT[Entry]))
IN[S4]=f3(f1(OUT[Entry]))⊔f3((f2(OUT[Entry]))
如果F是distributive的话,MFP和MOP的精度一样,否则MOP精度高于MFP。
F是distributive,也即
F ( x ⊔ y ) = F ( x ) ⊔ F ( y ) F(x ⊔ y) = F(x) ⊔ F(y) F(x⊔y)=F(x)⊔F(y)
对于可达性分析(Reaching Definitions)、存活变量分析(Live Variables Analysis)和可用表达式分析(Available Expressions Analysis),都是distributive的。
对常量传播则不是distributive的。下面这个例子,显然MOP分析结果更加准确。
参考
- https://blog.csdn.net/zhang971105/article/details/109244115#t27