Ejemplo n.º 1
0
 public XILScheduleMonitor(XIL3Function func)
 {
     Func               = func;
     _maxCStep          = -1;
     _csteps            = new int[func.Instructions.Length];
     _ii                = new int[func.Instructions.Length];
     _lat               = new int[func.Instructions.Length];
     Instructions       = PropMaps.CreateForArray(Func.Instructions, EAccess.ReadOnly);
     CStep              = PropMaps.CreateForArray(_csteps, EAccess.ReadOnly);
     InitiationInterval = PropMaps.CreateForArray(_ii, EAccess.ReadOnly);
     Latency            = PropMaps.CreateForArray(_lat, EAccess.ReadOnly);
 }
Ejemplo n.º 2
0
        private void Init()
        {
            int numInstrs = _func.Instructions.Length;

            _predsBack = new ScheduleDependency <XIL3Instr> [numInstrs][];
            _succsBack = new ScheduleDependency <XIL3Instr> [numInstrs][];
            var tmp         = new List <ScheduleDependency <XIL3Instr> > [numInstrs];
            var rslot2instr = new Dictionary <int, XIL3Instr>();

            foreach (XIL3Instr i in _func.Instructions)
            {
                foreach (int rslot in i.ResultSlots)
                {
                    rslot2instr[rslot] = i;
                }
                var bb = _cfg.GetBasicBlockContaining(i.Index);
                _predsBack[i.Index] = i.Preds
                                      .Select(p => ToScheduleDependency(i, p))
                                      .Concat(i.OperandSlots.Select(s =>
                                                                    new ScheduleDependency <XIL3Instr>(
                                                                        rslot2instr[s],
                                                                        Latency[rslot2instr[s]],
                                                                        int.MaxValue)))
                                      .Distinct()
                                      .Where(_ => bb.Contains(_.Task)) // only admit predecessors from same basic block
                                      .ToArray();
                tmp[i.Index] = new List <ScheduleDependency <XIL3Instr> >();
            }
            foreach (XIL3Instr i in _func.Instructions)
            {
                foreach (var sdep in _predsBack[i.Index])
                {
                    tmp[sdep.Task.Index].Add(new ScheduleDependency <XIL3Instr>(i, sdep.MinDelay, sdep.MaxDelay));
                }
            }
            foreach (XIL3Instr i in _func.Instructions)
            {
                _succsBack[i.Index] = tmp[i.Index].ToArray();
            }
            _preds = PropMaps.CreateForArray <XIL3Instr, ScheduleDependency <XIL3Instr>[]>(_predsBack, i => i.Index, EAccess.ReadOnly);
            _succs = PropMaps.CreateForArray <XIL3Instr, ScheduleDependency <XIL3Instr>[]>(_succsBack, i => i.Index, EAccess.ReadOnly);
        }