aboutsummaryrefslogtreecommitdiff
path: root/ARMeilleure/Translation/SsaConstruction.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ARMeilleure/Translation/SsaConstruction.cs')
-rw-r--r--ARMeilleure/Translation/SsaConstruction.cs10
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;