void allocate()
    {
        ASSERT_WITH_MESSAGE(m_activeMoves.size() >= m_coalescingCandidates.size(), "The activeMove set should be big enough for the quick operations of BitVector.");

        makeWorkList();

        if (debug) {
            dumpInterferenceGraphInDot(WTF::dataFile());
            dataLog("Initial work list\n");
            dumpWorkLists(WTF::dataFile());
        }

        do {
            if (traceDebug) {
                dataLog("Before Graph simplification iteration\n");
                dumpWorkLists(WTF::dataFile());
            }

            if (!m_simplifyWorklist.isEmpty())
                simplify();
            else if (!m_worklistMoves.isEmpty())
                coalesce();
            else if (!m_freezeWorklist.isEmpty())
                freeze();
            else if (!m_spillWorklist.isEmpty())
                selectSpill();

            if (traceDebug) {
                dataLog("After Graph simplification iteration\n");
                dumpWorkLists(WTF::dataFile());
            }
        } while (!m_simplifyWorklist.isEmpty() || !m_worklistMoves.isEmpty() || !m_freezeWorklist.isEmpty() || !m_spillWorklist.isEmpty());

        assignColors();
    }
Example #2
0
ClosedKnot::ClosedKnot(const KnotStyle &knotStyle,
                       int windowWidth, int windowHeight)
    :   inherited(knotStyle, windowWidth, windowHeight, 12)
{
    // Set boundary conditions for a closed knot.

    // The left and right border must consist of vertical...
    for (int i = 0; i < mVSections; ++i) {
        sectionType(0, i) = sectionType(mHSections-1, i) = V;
    }

    // ... half sections.
    for (int i = 0; i <= mVSections; ++i) {
        sectionCorner(0, i) = sectionCorner(mHSections, i) = N;
    }

    // The top and bottom border must have horizontal corners.
    for (int i = 1; i < mHSections; ++i) {
        sectionCorner(i, 0) = sectionCorner(i, mVSections) = H;
    }

    // Assign colors to the knot.
    assignColors();
}