diff options
Diffstat (limited to 'ARMeilleure/Translation/SsaConstruction.cs')
| -rw-r--r-- | ARMeilleure/Translation/SsaConstruction.cs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/ARMeilleure/Translation/SsaConstruction.cs b/ARMeilleure/Translation/SsaConstruction.cs index 1c6e83c9..76cb9a44 100644 --- a/ARMeilleure/Translation/SsaConstruction.cs +++ b/ARMeilleure/Translation/SsaConstruction.cs @@ -45,7 +45,7 @@ namespace ARMeilleure.Translation public static void Construct(ControlFlowGraph cfg) { var globalDefs = new DefMap[cfg.Blocks.Count]; - var localDefs = new Operand[RegisterConsts.TotalCount]; + var localDefs = new Operand[cfg.LocalsCount + RegisterConsts.TotalCount]; var dfPhiBlocks = new Queue<BasicBlock>(); @@ -264,6 +264,12 @@ namespace ARMeilleure.Translation return true; } + else if (operand is { Kind: OperandKind.LocalVariable } && operand.GetLocalNumber() > 0) + { + result = RegisterConsts.TotalCount + operand.GetLocalNumber() - 1; + + return true; + } result = -1; @@ -274,7 +280,7 @@ namespace ARMeilleure.Translation { if (!TryGetId(operand, out int key)) { - Debug.Fail("OperandKind must be Register."); + Debug.Fail("OperandKind must be Register or a numbered LocalVariable."); } return key; |
