URL
https://opencores.org/ocsvn/or1k/or1k/trunk
Subversion Repositories or1k
Compare Revisions
- This comparison shows the changes necessary to convert path
/
- from Rev 940 to Rev 941
- ↔ Reverse comparison
Rev 940 → Rev 941
/trunk/or1ksim/cuc/cuc.h
282,6 → 282,9
function is unmodified. */ |
cuc_func *preunroll_loop (cuc_func *func, int b, int preroll, int unroll, char *bb_filename); |
|
/* Clean memory and data dependencies */ |
void clean_deps (cuc_func *func); |
|
/* Schedule memory accesses |
0 - exact; 1 - strong; 2 - weak; 3 - none */ |
void schedule_memory (cuc_func *func, int otype); |
/trunk/or1ksim/cuc/bb.c
61,11 → 61,26
cuc_bb *cpy_bb (cuc_bb *dest, cuc_bb *src) |
{ |
int i, j; |
dep_list *d; |
assert (dest != src); |
*dest = *src; |
assert (dest->insn = malloc (sizeof (cuc_insn) * src->ninsn)); |
for (i = 0; i < src->ninsn; i++) |
for (i = 0; i < src->ninsn; i++) { |
d = src->insn[i].dep; |
dest->insn[i] = src->insn[i]; |
dest->insn[i].dep = NULL; |
while (d) { |
add_dep (&dest->insn[i].dep, d->ref); |
d = d->next; |
} |
} |
|
d = src->mdep; |
dest->mdep = NULL; |
while (d) { |
add_dep (&dest->mdep, d->ref); |
d = d->next; |
} |
if (src->ntim) { |
assert (dest->tim = malloc (sizeof (cuc_timings) * src->ntim)); |
for (i = 0; i < src->ntim; i++) { |
126,7 → 141,6
free (f); |
} |
|
|
/* Recalculates last_used_reg */ |
void recalc_last_used_reg (cuc_func *f, int b) |
{ |
/trunk/or1ksim/cuc/memory.c
25,6 → 25,35
#include "cuc.h" |
#include "insn.h" |
|
|
/* Cleans memory & data dependencies */ |
void clean_deps (cuc_func *f) |
{ |
int b, i; |
dep_list *t; |
for (b = 0; b < f->num_bb; b++) { |
for (i = 0; i < f->bb[b].ninsn; i++) { |
t = f->bb[b].insn[i].dep; |
while (t) { |
dep_list *tmp = t; |
t = t->next; |
free (tmp); |
} |
f->bb[b].insn[i].dep = NULL; |
} |
|
t = f->bb[b].mdep; |
while (t) { |
dep_list *tmp = t; |
t = t->next; |
free (tmp); |
} |
f->bb[b].mdep = NULL; |
} |
|
f->nmsched = 0; |
} |
|
/* Checks for memory conflicts between two instructions; returns 1 if detected |
0 - exact; 1 - strong; 2 - weak; 3 - none */ |
static int check_memory_conflict (cuc_func *f, cuc_insn *a, cuc_insn *b, int otype) |
/trunk/or1ksim/cuc/cuc.c
65,6 → 65,8
log ("Optimizing.\n"); |
do { |
modified = 0; |
clean_deps (func); |
if (cuc_debug >= 6) print_cuc_bb (func, "AFTER_CLEAN_DEPS"); |
if (optimize_cmovs (func)) { |
if (cuc_debug >= 6) print_cuc_bb (func, "AFTER_OPT_CMOVS"); |
modified = 1; |
116,8 → 118,14
if (cuc_debug >= 6) print_cuc_bb (func, "NO_NOPS"); |
modified = 1; |
} |
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); |
set_io (func); |
#if 0 |
detect_max_values (func); |
if (cuc_debug >= 5) print_cuc_bb (func, "AFTER_MAX_VALUES"); |
133,16 → 141,6
if (cuc_debug >= 2) print_cuc_bb (func, "AFTER_PREUNROLL"); |
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", |
timings->new_time, func->orig_time, timings->size); |
log ("new time = %icyc, old_time = %icyc, size = %.0f gates\n", |
219,14 → 217,7
add_latches (func); |
if (cuc_debug >= 1) print_cuc_bb (func, "AFTER_LATCHES"); |
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); |
log ("Base option: pre%i,un%i,sha%i: %icyc %.1f\n", |
timings.preroll, timings.unroll, timings.nshared, timings.new_time, timings.size); |
431,15 → 422,9
add_latches (f); |
if (cuc_debug >= 1) print_cuc_bb (f, "AFTER_LATCHES"); |
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); |
output_verilog (f, tmp); |
output_verilog (f, tmp, name); |
return f; |
} |
|