private void populateInterferenceGraph(BasicBlock bb,ControlFlowGraph cfg,InterferenceGraph graph,Set<BasicBlock> visited)
    {
        final Set<AliveVar> aliveVars = getAliveVars(bb);
        if ( visited.contains( bb ) ) {
            return;
        }
        visited.add(bb);
        
        if ( bb.equals( cfg.getFunctionEntry() ) || bb.equals( cfg.getFunctionExit() ) ) {
            return;
        }        
        
        for ( AliveVar var1 : aliveVars  ) 
        {
            for ( AliveVar var2 : aliveVars  ) 
            {
                if ( var1 != var2 ) 
                {
                    Node n1 = graph.getOrCreateNode( var1.definition );
                    Node n2 = graph.getOrCreateNode( var2.definition );
                    n1.addEdge( n2 );
                    n2.addEdge( n1 );
                }
            }
        }
        for ( BasicBlock pred : bb.getPredecessors() ) {
            populateInterferenceGraph( pred , cfg, graph , visited );
        }
    }