Пример #1
0
        protected void RunAnalysis()
        {
            switch (_worklistMethodName)
            {
            case "FIFOWorklist":
                _worklist = new FIFOWorklist(_flow);
                break;

            case "LIFOWorklist":
                _worklist = new LIFOWorklist(_flow);
                break;

            case "ChaoticIteration":
                _worklist = new ChaoticIteration(_flow.Shuffle(3));
                break;

            case "RoundRobin":
                DepthFirstSpanningTree dfst = new DepthFirstSpanningTree(new FlowGraph(_program));
                _worklist = new RoundRobin(_flow, dfst.GetRP());
                break;

            default:
                break;
            }

            WorkThroughWorklist(_worklist);

            var labels = FlowUtil.Labels(_blocks);

            foreach (var lab in labels)
            {
                var edges = _flow.Where(x => x.Dest == lab);
                _analysisFilled[lab] = TransferFunctions(lab);
            }
        }
Пример #2
0
        private int WorkThroughWorklist(IWorkList _workList)
        {
            int numberOfOperations = 0;


            List <(int, string)> analysisCircleList = new List <(int, string)>();

            foreach (int lab in FlowUtil.Labels(_blocks))
            {
                analysisCircleList.Add((lab, _analysisCircle[lab].ToString()));