public SparseConditionalConstantPropagation(BasicBlocks basicBlocks, InstructionSet instructionSet, SectionTrace trace) { this.Trace = trace; this.BasicBlocks = basicBlocks; this.InstructionSet = instructionSet; MainTrace = CreateTrace("ConditionalConstantPropagation"); // Method is empty - must be a plugged method if (BasicBlocks.HeadBlocks.Count == 0) return; blockStates = new bool[BasicBlocks.Count]; for (int i = 0; i < BasicBlocks.Count; i++) { blockStates[i] = false; } // Initialize foreach (var block in BasicBlocks.HeadBlocks) { AddExecutionBlock(block); } while (blockWorklist.Count > 0 || instructionWorkList.Count > 0) { ProcessBlocks(); ProcessInstructions(); } DumpTrace(); // Release phiStatements = null; }
private SectionTrace CreateTrace(string name) { var sectionTrace = new SectionTrace(Trace, name); return sectionTrace; }
public BasicRegisterAllocator(BasicBlocks basicBlocks, VirtualRegisters compilerVirtualRegisters, InstructionSet instructionSet, StackLayout stackLayout, BaseArchitecture architecture, SectionTrace trace) : base(basicBlocks, compilerVirtualRegisters, instructionSet, stackLayout, architecture, trace) { }
protected override void Run() { if (!HasCode) return; trace = CreateTrace(); foreach (var local in MethodCompiler.LocalVariables) { if (local.IsVirtualRegister) continue; if (local.Definitions.Count != 1) continue; if (!local.IsReferenceType && !local.IsInteger && !local.IsR && !local.IsChar && !local.IsBoolean && !local.IsPointer) continue; if (ContainsAddressOf(local)) continue; Promote(local); } }
private void TraceMoveHints() { if (!Trace.Active) return; var moveHintTrace = new SectionTrace(Trace, "MoveHints"); foreach (var moveHint in moveHints) { moveHintTrace.Log(moveHint.Value.ToString()); } }