Esempio n. 1
0
 /// <summary>
 /// Creates a new loop info instance from the given SCC while checking for
 /// unique entry and exit blocks.
 /// </summary>
 /// <param name="scc">The SCC.</param>
 /// <returns>The resolved loop info instance.</returns>
 public static LoopInfo <TOrder, TDirection> Create(
     SCCs <TOrder, TDirection> .SCC scc)
 {
     if (!TryCreate(scc, out var loopInfo))
     {
         throw new InvalidKernelOperationException();
     }
     return(loopInfo);
 }
Esempio n. 2
0
            /// <summary>
            /// Constructs a new SCC.
            /// </summary>
            /// <param name="parent">The parent SCC.</param>
            /// <param name="index">The SCC index.</param>
            /// <param name="sccMembers">All SCC members.</param>
            internal SCC(
                SCCs <TOrder, TDirection> parent,
                int index,
                List <BasicBlock> sccMembers)
            {
                Debug.Assert(index >= 0, "Invalid SCC index");
                Debug.Assert(sccMembers != null, "Invalid SCC members");

                Parent = parent;
                Index  = index;
                nodes  = sccMembers;
            }
Esempio n. 3
0
            /// <summary>
            /// Constructs a new SCC.
            /// </summary>
            /// <param name="parent">The parent SCC.</param>
            /// <param name="index">The SCC index.</param>
            /// <param name="sccMembers">All SCC members.</param>
            internal SCC(
                SCCs parent,
                int index,
                List <CFG.Node> sccMembers)
            {
                Debug.Assert(parent != null, "Invalid parent");
                Debug.Assert(index >= 0, "Invalid SCC index");
                Debug.Assert(sccMembers != null, "Invalid SCC members");

                Parent = parent;
                Index  = index;
                nodes  = sccMembers;
            }