@Override
    public void run(ListIterator<Instruction> iter){
        Instruction i = iter.next();
        // if this function does any function calls, the return
        // address will need to be saved
        if(i instanceof Call) {
            registersUsed.add(retAddrReg);
        }
        Integer color = i.getColor();
        // negative values are used as special placeholders
        if(color != null && color >= 0) {
            // color is a 0 based number, check if this value will be
            // spilled
            if(color >= registersAvailable) {
                memNeeded = Math.max(memNeeded, color - registersAvailable + 1);
            } else {
                registersUsed.add(color);
            }            
        }
    }