这段 IR 是不是 SSA
(每道题开头都有同一段:三地址码用元组表示——(op, dst, a, b),如 ("+","t2","a","t1") 是 t2 = a + t1、("const","t1",2,None) 是 t1 = 2。一个程序是这样一串元组。count_ops 数几条、temps_of 交回定义的临时名。)
补充:is_ssa(prog) 判每个临时名是不是只被定义一次。看这段(t 被定义两次):
def count_ops(prog):
"""三地址码程序一共几条指令。"""
return len(prog)
def temps_of(prog):
"""按出现顺序交回程序里定义的临时变量名(每条 IR 的 dst)。"""
return [t[1] for t in prog]
def is_ssa(prog):
ds = [t[1] for t in prog]
return len(ds) == len(set(ds))
prog = [("const", "t", 1, None), ("+", "t", "t", "a")]
print(is_ssa(prog))
全部评论