public void Transform() { foreach (var s in ssaIds.ToList()) { sidGrf = s; if (!IsLocallyDefinedFlagGroup(sidGrf)) { continue; } var uses = new HashSet <Statement>(); aliases = new HashSet <SsaIdentifier>(); ClosureOfUsingStatements(sidGrf, sidGrf.DefExpression, uses, aliases); if (trace.TraceInfo) { Debug.WriteLine(string.Format("Tracing {0}", sidGrf.DefStatement.Instruction)); } foreach (var u in uses) { useStm = u; if (trace.TraceInfo) { Debug.WriteLine(string.Format(" used {0}", useStm.Instruction)); } useStm.Instruction.Accept(this); if (trace.TraceInfo) { Debug.WriteLine(string.Format(" now {0}", useStm.Instruction)); } } } }
public void Transform() { foreach (var s in ssaIds.ToList()) { sidGrf = s; if (!IsLocallyDefinedFlagGroup(sidGrf)) { continue; } if (sidGrf.DefStatement.Instruction is AliasAssignment) { continue; } var uses = new HashSet <Statement>(); this.aliases = new HashSet <Identifier>(); ClosureOfUsingStatements(sidGrf, uses, aliases); trace.Inform("Tracing {0}", sidGrf.DefStatement.Instruction); foreach (var u in uses) { useStm = u; trace.Inform(" used {0}", useStm.Instruction); useStm.Instruction.Accept(this); trace.Inform(" now {0}", useStm.Instruction); } } }
public void Transform() { foreach (var s in ssaIds.ToList()) { sidGrf = s; if (!IsLocallyDefinedFlagGroup(sidGrf)) { continue; } if (sidGrf.DefStatement !.Instruction is AliasAssignment) { continue; } var uses = new HashSet <Statement>(); this.aliases.Clear(); ClosureOfUsingStatements(sidGrf, uses, aliases); trace.Inform("CCE: Tracing {0}", sidGrf.DefStatement.Instruction); foreach (var u in uses) { try { useStm = u; trace.Inform("CCE: used {0}", useStm.Instruction); useStm.Instruction.Accept(this); trace.Inform("CCE: now {0}", useStm.Instruction); } catch (Exception ex) { var loc = listener.CreateStatementNavigator(program, u); listener.Error(loc, ex, "An error occurred while eliminating condition codes in procedure {0}.", ssa.Procedure.Name); } } } }