Line 63... |
Line 63... |
int modified = 0;
|
int modified = 0;
|
int first = 1;
|
int first = 1;
|
log ("Optimizing.\n");
|
log ("Optimizing.\n");
|
do {
|
do {
|
modified = 0;
|
modified = 0;
|
|
clean_deps (func);
|
|
if (cuc_debug >= 6) print_cuc_bb (func, "AFTER_CLEAN_DEPS");
|
if (optimize_cmovs (func)) {
|
if (optimize_cmovs (func)) {
|
if (cuc_debug >= 6) print_cuc_bb (func, "AFTER_OPT_CMOVS");
|
if (cuc_debug >= 6) print_cuc_bb (func, "AFTER_OPT_CMOVS");
|
modified = 1;
|
modified = 1;
|
}
|
}
|
if (cuc_debug) cuc_check (func);
|
if (cuc_debug) cuc_check (func);
|
Line 114... |
Line 116... |
}
|
}
|
if (remove_nops (func)) {
|
if (remove_nops (func)) {
|
if (cuc_debug >= 6) print_cuc_bb (func, "NO_NOPS");
|
if (cuc_debug >= 6) print_cuc_bb (func, "NO_NOPS");
|
modified = 1;
|
modified = 1;
|
}
|
}
|
} while (modified);
|
|
set_io (func);
|
set_io (func);
|
|
add_memory_dep (func, func->memory_order);
|
|
if (cuc_debug >= 7) print_cuc_bb (func, "AFTER_MEMORY_DEP");
|
|
add_data_dep (func);
|
|
if (cuc_debug >= 8) print_cuc_bb (func, "AFTER_DATA_DEP");
|
|
schedule_memory (func, func->memory_order);
|
|
if (cuc_debug >= 7) print_cuc_bb (func, "AFTER_SCHEDULE_MEM");
|
|
} while (modified);
|
#if 0
|
#if 0
|
detect_max_values (func);
|
detect_max_values (func);
|
if (cuc_debug >= 5) print_cuc_bb (func, "AFTER_MAX_VALUES");
|
if (cuc_debug >= 5) print_cuc_bb (func, "AFTER_MAX_VALUES");
|
#endif
|
#endif
|
}
|
}
|
Line 131... |
Line 139... |
cucdebug (2, "BB%i unroll %i times preroll %i times\n", b, j, i);
|
cucdebug (2, "BB%i unroll %i times preroll %i times\n", b, j, i);
|
func = preunroll_loop (f, b, i, j, bb_filename);
|
func = preunroll_loop (f, b, i, j, bb_filename);
|
if (cuc_debug >= 2) print_cuc_bb (func, "AFTER_PREUNROLL");
|
if (cuc_debug >= 2) print_cuc_bb (func, "AFTER_PREUNROLL");
|
cuc_optimize (func);
|
cuc_optimize (func);
|
|
|
add_latches (func);
|
|
if (cuc_debug >= 1) print_cuc_bb (func, "AFTER_LATCHES");
|
|
add_memory_dep (func, func->memory_order);
|
|
if (cuc_debug >= 7) print_cuc_bb (func, "AFTER_MEMORY_DEP");
|
|
add_data_dep (func);
|
|
if (cuc_debug >= 8) print_cuc_bb (func, "AFTER_DATA_DEP");
|
|
schedule_memory (func, func->memory_order);
|
|
if (cuc_debug >= 7) print_cuc_bb (func, "AFTER_SCHEDULE_MEM");
|
|
|
|
analyse_timings (func, timings);
|
|
cucdebug (2, "new_time = %i, old_time = %i, size = %f\n",
|
cucdebug (2, "new_time = %i, old_time = %i, size = %f\n",
|
timings->new_time, func->orig_time, timings->size);
|
timings->new_time, func->orig_time, timings->size);
|
log ("new time = %icyc, old_time = %icyc, size = %.0f gates\n",
|
log ("new time = %icyc, old_time = %icyc, size = %.0f gates\n",
|
timings->new_time, func->orig_time, timings->size);
|
timings->new_time, func->orig_time, timings->size);
|
//output_verilog (func, argv[1]);
|
//output_verilog (func, argv[1]);
|
Line 217... |
Line 215... |
timings.nshared = 0;
|
timings.nshared = 0;
|
|
|
add_latches (func);
|
add_latches (func);
|
if (cuc_debug >= 1) print_cuc_bb (func, "AFTER_LATCHES");
|
if (cuc_debug >= 1) print_cuc_bb (func, "AFTER_LATCHES");
|
analyse_timings (func, &timings);
|
analyse_timings (func, &timings);
|
add_memory_dep (func, func->memory_order);
|
|
if (cuc_debug >= 7) print_cuc_bb (func, "AFTER_MEMORY_DEP");
|
|
add_data_dep (func);
|
|
if (cuc_debug >= 8) print_cuc_bb (func, "AFTER_DATA_DEP");
|
|
schedule_memory (func, memory_order);
|
|
if (cuc_debug >= 7) print_cuc_bb (func, "AFTER_SCHEDULE_MEM");
|
|
|
|
//output_verilog (func, module_name);
|
|
free_func (func);
|
free_func (func);
|
log ("Base option: pre%i,un%i,sha%i: %icyc %.1f\n",
|
log ("Base option: pre%i,un%i,sha%i: %icyc %.1f\n",
|
timings.preroll, timings.unroll, timings.nshared, timings.new_time, timings.size);
|
timings.preroll, timings.unroll, timings.nshared, timings.new_time, timings.size);
|
saved->timings = timings;
|
saved->timings = timings;
|
|
|
Line 429... |
Line 420... |
//csm_gen (f, rf, st->nshared, st->shared);
|
//csm_gen (f, rf, st->nshared, st->shared);
|
}
|
}
|
add_latches (f);
|
add_latches (f);
|
if (cuc_debug >= 1) print_cuc_bb (f, "AFTER_LATCHES");
|
if (cuc_debug >= 1) print_cuc_bb (f, "AFTER_LATCHES");
|
analyse_timings (f, &tt);
|
analyse_timings (f, &tt);
|
add_memory_dep (f, f->memory_order);
|
|
if (cuc_debug >= 7) print_cuc_bb (f, "AFTER_MEMORY_DEP");
|
|
add_data_dep (f);
|
|
if (cuc_debug >= 8) print_cuc_bb (f, "AFTER_DATA_DEP");
|
|
schedule_memory (f, f->memory_order);
|
|
if (cuc_debug >= 7) print_cuc_bb (f, "AFTER_SCHEDULE_MEM");
|
|
|
|
sprintf (tmp, "%s%s", cut_filename, name);
|
sprintf (tmp, "%s%s", cut_filename, name);
|
output_verilog (f, tmp);
|
output_verilog (f, tmp, name);
|
return f;
|
return f;
|
}
|
}
|
|
|
/* Calculates required time, based on selected options */
|
/* Calculates required time, based on selected options */
|
int calc_cycles (cuc_func *f)
|
int calc_cycles (cuc_func *f)
|