question: public void ddSolve ( Set < Node > qryNodes ) { long solve_time = 0 , prepare_time = 0 ; if ( hasExecuted == false ) solve ( ) ; if ( ddPrepared == false || offlineProcessor == null ) { offlineProcessor = new OfflineProcessor ( this ) ; IFigureManager . cleanCache ( ) ; ddPrepared = true ; ps . println ( ) ; ps . println ( "==> Entering demand-driven mode (experimental)." ) ; } int init_size = qryNodes . size ( ) ; if ( init_size == 0 ) { ps . println ( "Please provide at least one pointer." ) ; return ; } Date prepare_begin = new Date ( ) ; offlineProcessor . init ( ) ; offlineProcessor . addUserDefPts ( qryNodes ) ; offlineProcessor . runOptimizations ( ) ; Date prepare_end = new Date ( ) ; prepare_time += prepare_end . getTime ( ) - prepare_begin . getTime ( ) ; Date begin = new Date ( ) ; prepareNextRun ( ) ; nodeGenerator . initFlowGraph ( this ) ; solveConstraints ( ) ; Date end = new Date ( ) ; solve_time += end . getTime ( ) - begin . getTime ( ) ; ps . println ( ) ; ps . printf ( "[ddGeom] Preprocessing time: %.2f seconds\n" , ( double ) prepare_time / 1000 ) ; ps . printf ( "[ddGeom] Main propagation time: %.2f seconds\n" , ( double ) solve_time / 1000 ) ; }
target:  The demand-driven mode for precisely computing points-to information for given pointers. Call graph will not be updated in this mode.