把 IL 指令流归约成语句与表达式节点
StackSimulator
01 Syntax
Microsoft.VisualBasic.ApplicationServices.Development.VisualStudio.IL.StackSimulator
02 Methods
| Name | Overloads | Summary |
|---|---|---|
| Run | 1 | 按 RPO 逐块做栈模拟,把结果写回各个 BasicBlock |
| BuildEntryStack | 1 | 由各前驱的出口栈合成入口栈。深度不一致直接报错;同一槽位上前驱们留下的 节点不同(短路布尔的典型形态)时引入一个合并变量,并在各前驱末尾补赋值。 |
| ReduceConditionalBranch | 1 | 把条件分支归一化成"条件成立去 true 后继": brtrue 原样;brfalse 取反;beq/bne/bgt/bge/blt/ble 弹两个操作数构造比较。 |
| WiderType | 1 | 二元运算的结果类型:取两侧中"更宽"的那个 |
03 Properties
| Name | Overloads | Summary |
|---|---|---|
| MergeDeclarations | 1 | 跨块栈值合并时临时引入的变量声明(需提升到函数体开头) |
04 Fields
| Name | Overloads | Summary |
|---|---|---|
| _exitStacks | 1 | 块编号 -> 该块出口处的求值栈 |
05 Members
Run
按 RPO 逐块做栈模拟,把结果写回各个 BasicBlock
BuildEntryStack(BasicBlock)
由各前驱的出口栈合成入口栈。深度不一致直接报错;同一槽位上前驱们留下的 节点不同(短路布尔的典型形态)时引入一个合并变量,并在各前驱末尾补赋值。
把条件分支归一化成"条件成立去 true 后继": brtrue 原样;brfalse 取反;beq/bne/bgt/bge/blt/ble 弹两个操作数构造比较。
WiderType(
Type, Type)二元运算的结果类型:取两侧中"更宽"的那个
MergeDeclarations
跨块栈值合并时临时引入的变量声明(需提升到函数体开头)
_exitStacks
块编号 -> 该块出口处的求值栈