Beispiel #1
0
        public (List <VarsSet>, List <VarsSet>) GenerateInputOutputActiveDefs()
        {
            var In  = new List <VarsSet>();
            var Out = new List <VarsSet>();

            var startToId = GetStartToId(_bblocks);

            for (int i = 0; i < _bblocks.Count(); ++i)
            {
                In.Add(new VarsSet());
                Out.Add(new VarsSet());
            }

            bool change = true;

            while (change)
            {
                change = false;

                for (int i = 0; i < _bblocks.Count(); ++i)
                {
                    var st = _bblocks[i].StartLabel;
                    Out[i] = new VarsSet(Next[st].SelectMany(p => In[startToId[p]]));
                    int sz = In[i].Count;

                    In[i] = ActiveDefinitions.TransferByUseAndDef(Out[i], _useByStart[st], _defByStart[st]);

                    change |= sz != In[i].Count;
                }
            }

            return(In, Out);
        }
Beispiel #2
0
        private void GenerateUseAndDefSets()
        {
            var bblocks = _baseBlockByStart.Select(kp => kp.Value).ToList();

            var(use, def) = ActiveDefinitions.GetUseAndDefSets(bblocks);

            for (int i = 0; i < bblocks.Count(); ++i)
            {
                _useByStart[bblocks[i].StartLabel] = use[i];
                _defByStart[bblocks[i].StartLabel] = def[i];
            }
        }