public static void Run(CompilerTrace compilerTrace, string stage, MosaMethod method, BasicBlocks basicBlocks, int version) { if (!compilerTrace.IsTraceable(TraceLevel)) { return; } var traceLog = new TraceLog(TraceType.MethodInstructions, method, stage, version); traceLog?.Log($"{method.FullName} [v{version}] after stage {stage}:"); traceLog?.Log(); if (basicBlocks.Count > 0) { foreach (var block in basicBlocks) { traceLog?.Log($"Block #{block.Sequence} - Label L_{block.Label:X4}" + (block.IsHeadBlock ? " [Header]" : string.Empty)); traceLog?.Log($" Prev: {ListBlocks(block.PreviousBlocks)}"); LogInstructions(traceLog, block.First); traceLog?.Log($" Next: {ListBlocks(block.NextBlocks)}"); traceLog?.Log(); } } else { traceLog?.Log("No instructions."); } compilerTrace.PostTraceLog(traceLog); }
public static void Run(CompilerTrace compilerTrace, string stage, MosaMethod method, BasicBlocks basicBlocks) { if (compilerTrace == null) { return; } if (!compilerTrace.TraceFilter.IsMatch(method, stage)) { return; } var traceLog = new TraceLog(TraceType.InstructionList, method, stage, true); traceLog.Log($"{method.FullName} after stage {stage}:"); traceLog.Log(); if (basicBlocks.Count > 0) { foreach (var block in basicBlocks) { traceLog.Log($"Block #{block.Sequence} - Label L_{block.Label:X4}" + (block.IsHeadBlock ? " [Header]" : string.Empty)); traceLog.Log($" Prev: {ListBlocks(block.PreviousBlocks)}"); LogInstructions(traceLog, block.First); traceLog.Log($" Next: {ListBlocks(block.NextBlocks)}"); traceLog.Log(); } } else { traceLog.Log("No instructions."); } compilerTrace.NewTraceLog(traceLog); }