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));
                    }
                }
            }
        }
示例#2
0
        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);
                    }
                }
            }
        }