补全:常量折叠
补全 fold:两个操作数都是常量的运算,折成 const。 贯穿本节的 IR 模型(判题机没 gcc,这是它的确定模型):程序是三地址码元组列表,每条 (dst, op, a, b)——op ∈ const/copy/+/-/*,操作数
补全:常量传播
补全 propagate:操作数是已知常量的变量,换成它的值。 贯穿本节的 IR 模型(判题机没 gcc,这是它的确定模型):程序是三地址码元组列表,每条 (dst, op, a, b)——op ∈ const/copy/+/-/*,操作数
补全:数 const 指令
补全 count_const:数程序里有几条 const。 贯穿本节的 IR 模型(判题机没 gcc,这是它的确定模型):程序是三地址码元组列表,每条 (dst, op, a, b)——op ∈ const/copy/+/-/*,操作数 a
死代码指的是什么
四条赋值,两条没人用 没人用的淡出删掉,结果照旧 可以被死代码消除删掉的,是【0】。 贯穿本节的 IR 模型(判题机没 gcc,这是它的确定模型):程序是三地址码元组列表,每条 (dst, op, a, b)——op ∈ const/cop
删死代码为什么安全
四条赋值,两条没人用 没人用的淡出删掉,结果照旧 删掉死代码不改变程序结果,因为【0】。 贯穿本节的 IR 模型(判题机没 gcc,这是它的确定模型):程序是三地址码元组列表,每条 (dst, op, a, b)——op ∈ const/c
什么样的赋值不能删
下面这种赋值不能当死代码删:【0】。 贯穿本节的 IR 模型(判题机没 gcc,这是它的确定模型):程序是三地址码元组列表,每条 (dst, op, a, b)——op ∈ const/copy/+/-/*,操作数 a/b 是整数(常量)或
有几条死代码
按模型,[d=const 1, r=const 2]、活跃输出 live=[r],count_dead 交回几? 贯穿本节的 IR 模型(判题机没 gcc,这是它的确定模型):程序是三地址码元组列表,每条 (dst, op, a, b)——
用到了几个不同变量
按模型,[r=x+y],used_vars 里有几个变量? 贯穿本节的 IR 模型(判题机没 gcc,这是它的确定模型):程序是三地址码元组列表,每条 (dst, op, a, b)——op ∈ const/copy/+/-/*,操作数 a
补全:收集用到的变量
补全 used_vars:把当作操作数用到的变量名收进来(这里补 a)。 贯穿本节的 IR 模型(判题机没 gcc,这是它的确定模型):程序是三地址码元组列表,每条 (dst, op, a, b)——op ∈ const/copy/+/-/
补全:死代码消除
补全 dce:只留下被用到或活跃输出的赋值。 贯穿本节的 IR 模型(判题机没 gcc,这是它的确定模型):程序是三地址码元组列表,每条 (dst, op, a, b)——op ∈ const/copy/+/-/*,操作数 a/b 是整数(