Assert number is not unknown for many cases in tgt-vvp.

This patch adds a number of asserts that a number is not unknown
in places where this should never happen.
This commit is contained in:
Cary R 2009-08-25 10:24:50 -07:00 committed by Stephen Williams
parent 1306a6db81
commit d108221fef
3 changed files with 25 additions and 1 deletions

View File

@ -48,6 +48,11 @@ static void draw_lpm_mux_ab(ivl_lpm_t net, const char*muxz)
if (number_is_immediate(d_rise, 64, 0) && if (number_is_immediate(d_rise, 64, 0) &&
number_is_immediate(d_fall, 64, 0) && number_is_immediate(d_fall, 64, 0) &&
number_is_immediate(d_decay, 64, 0)) { number_is_immediate(d_decay, 64, 0)) {
assert( ! number_is_unknown(d_rise));
assert( ! number_is_unknown(d_fall));
assert( ! number_is_unknown(d_decay));
fprintf(vvp_out, "L_%p .delay (%lu,%lu,%lu) L_%p/d;\n", fprintf(vvp_out, "L_%p .delay (%lu,%lu,%lu) L_%p/d;\n",
net, get_number_immediate(d_rise), net, get_number_immediate(d_rise),
get_number_immediate(d_fall), get_number_immediate(d_fall),

View File

@ -388,6 +388,10 @@ static char* draw_net_input_drive(ivl_nexus_t nex, ivl_nexus_ptr_t nptr)
number_is_immediate(d_fall, 64, 0) && number_is_immediate(d_fall, 64, 0) &&
number_is_immediate(d_decay, 64, 0)) { number_is_immediate(d_decay, 64, 0)) {
assert(! number_is_unknown(d_rise));
assert(! number_is_unknown(d_fall));
assert(! number_is_unknown(d_decay));
fprintf(vvp_out, "L_%p .delay " fprintf(vvp_out, "L_%p .delay "
"(%" PRIu64 ",%" PRIu64 ",%" PRIu64 ") L_%p/d;\n", "(%" PRIu64 ",%" PRIu64 ",%" PRIu64 ") L_%p/d;\n",
cptr, get_number_immediate64(d_rise), cptr, get_number_immediate64(d_rise),

View File

@ -87,7 +87,8 @@ static void set_to_lvariable(ivl_lval_t lval,
if (part_off_ex == 0) { if (part_off_ex == 0) {
part_off = 0; part_off = 0;
} else if (number_is_immediate(part_off_ex, IMM_WID, 0)) { } else if (number_is_immediate(part_off_ex, IMM_WID, 0) &&
!number_is_unknown(part_off_ex)) {
part_off = get_number_immediate(part_off_ex); part_off = get_number_immediate(part_off_ex);
part_off_ex = 0; part_off_ex = 0;
} }
@ -96,6 +97,7 @@ static void set_to_lvariable(ivl_lval_t lval,
it to select the word, and pay no further heed to the it to select the word, and pay no further heed to the
expression itself. */ expression itself. */
if (word_ix && number_is_immediate(word_ix, IMM_WID, 0)) { if (word_ix && number_is_immediate(word_ix, IMM_WID, 0)) {
assert(! number_is_unknown(word_ix));
use_word = get_number_immediate(word_ix); use_word = get_number_immediate(word_ix);
word_ix = 0; word_ix = 0;
} }
@ -233,12 +235,14 @@ static void assign_to_array_word(ivl_signal_t lsig, ivl_expr_t word_ix,
if (part_off_ex == 0) { if (part_off_ex == 0) {
part_off = 0; part_off = 0;
} else if (number_is_immediate(part_off_ex, IMM_WID, 0)) { } else if (number_is_immediate(part_off_ex, IMM_WID, 0)) {
assert(! number_is_unknown(part_off_ex));
part_off = get_number_immediate(part_off_ex); part_off = get_number_immediate(part_off_ex);
part_off_ex = 0; part_off_ex = 0;
} }
/* This code is common to all the different types of array delays. */ /* This code is common to all the different types of array delays. */
if (number_is_immediate(word_ix, IMM_WID, 0)) { if (number_is_immediate(word_ix, IMM_WID, 0)) {
assert(! number_is_unknown(word_ix));
fprintf(vvp_out, " %%ix/load 3, %lu, 0; address\n", fprintf(vvp_out, " %%ix/load 3, %lu, 0; address\n",
get_number_immediate(word_ix)); get_number_immediate(word_ix));
} else { } else {
@ -317,6 +321,7 @@ static void assign_to_lvector(ivl_lval_t lval, unsigned bit,
if (part_off_ex == 0) { if (part_off_ex == 0) {
part_off = 0; part_off = 0;
} else if (number_is_immediate(part_off_ex, IMM_WID, 0)) { } else if (number_is_immediate(part_off_ex, IMM_WID, 0)) {
assert(! number_is_unknown(part_off_ex));
part_off = get_number_immediate(part_off_ex); part_off = get_number_immediate(part_off_ex);
part_off_ex = 0; part_off_ex = 0;
} }
@ -647,6 +652,7 @@ static int show_stmt_assign_nb_real(ivl_statement_t net)
word_ix = ivl_lval_idx(lval); word_ix = ivl_lval_idx(lval);
assert(word_ix); assert(word_ix);
assert(number_is_immediate(word_ix, IMM_WID, 0)); assert(number_is_immediate(word_ix, IMM_WID, 0));
assert(! number_is_unknown(word_ix));
use_word = get_number_immediate(word_ix); use_word = get_number_immediate(word_ix);
/* This method no longer works since variable arrays do not /* This method no longer works since variable arrays do not
* support <variable_id>_<idx> access any more. We need real * support <variable_id>_<idx> access any more. We need real
@ -1112,11 +1118,13 @@ static void force_vector_to_lval(ivl_statement_t net, struct vector_info rvec)
part_off = 0; part_off = 0;
} else { } else {
assert(number_is_immediate(part_off_ex, IMM_WID, 0)); assert(number_is_immediate(part_off_ex, IMM_WID, 0));
assert(! number_is_unknown(part_off_ex));
part_off = get_number_immediate(part_off_ex); part_off = get_number_immediate(part_off_ex);
} }
if (word_idx != 0) { if (word_idx != 0) {
assert(number_is_immediate(word_idx, IMM_WID, 0)); assert(number_is_immediate(word_idx, IMM_WID, 0));
assert(! number_is_unknown(word_idx));
use_word = get_number_immediate(word_idx); use_word = get_number_immediate(word_idx);
} }
@ -1181,6 +1189,7 @@ static void force_link_rval(ivl_statement_t net, ivl_expr_t rval)
* part select (this could give us multiple drivers). */ * part select (this could give us multiple drivers). */
part_off_ex = ivl_lval_part_off(lval); part_off_ex = ivl_lval_part_off(lval);
if (ivl_signal_width(lsig) > ivl_signal_width(rsig) || if (ivl_signal_width(lsig) > ivl_signal_width(rsig) ||
// Do we need checks for number_is{immediate,unknown} of part_of_ex?
(part_off_ex && get_number_immediate(part_off_ex) != 0)) { (part_off_ex && get_number_immediate(part_off_ex) != 0)) {
fprintf(stderr, "%s:%u: vvp-tgt sorry: cannot %s signal to " fprintf(stderr, "%s:%u: vvp-tgt sorry: cannot %s signal to "
"a bit/part select.\n", ivl_expr_file(rval), "a bit/part select.\n", ivl_expr_file(rval),
@ -1191,11 +1200,13 @@ static void force_link_rval(ivl_statement_t net, ivl_expr_t rval)
/* At least for now, only handle force to fixed words of an array. */ /* At least for now, only handle force to fixed words of an array. */
if ((lword_idx = ivl_lval_idx(lval)) != 0) { if ((lword_idx = ivl_lval_idx(lval)) != 0) {
assert(number_is_immediate(lword_idx, IMM_WID, 0)); assert(number_is_immediate(lword_idx, IMM_WID, 0));
assert(! number_is_unknown(lword_idx));
use_lword = get_number_immediate(lword_idx); use_lword = get_number_immediate(lword_idx);
} }
if ((rword_idx = ivl_expr_oper1(rval)) != 0) { if ((rword_idx = ivl_expr_oper1(rval)) != 0) {
assert(number_is_immediate(rword_idx, IMM_WID, 0)); assert(number_is_immediate(rword_idx, IMM_WID, 0));
assert(! number_is_unknown(rword_idx));
use_rword = get_number_immediate(rword_idx); use_rword = get_number_immediate(rword_idx);
} }
@ -1279,11 +1290,13 @@ static int show_stmt_deassign(ivl_statement_t net)
part_off = 0; part_off = 0;
if (part_off_ex != 0) { if (part_off_ex != 0) {
assert(number_is_immediate(part_off_ex, 64, 0)); assert(number_is_immediate(part_off_ex, 64, 0));
assert(! number_is_unknown(part_off_ex));
part_off = get_number_immediate(part_off_ex); part_off = get_number_immediate(part_off_ex);
} }
if (word_idx != 0) { if (word_idx != 0) {
assert(number_is_immediate(word_idx, IMM_WID, 0)); assert(number_is_immediate(word_idx, IMM_WID, 0));
assert(! number_is_unknown(word_idx));
use_word = get_number_immediate(word_idx); use_word = get_number_immediate(word_idx);
} }
@ -1574,6 +1587,7 @@ static int show_stmt_release(ivl_statement_t net)
part_off = 0; part_off = 0;
if (part_off_ex != 0) { if (part_off_ex != 0) {
assert(number_is_immediate(part_off_ex, 64, 0)); assert(number_is_immediate(part_off_ex, 64, 0));
assert(! number_is_unknown(part_off_ex));
part_off = get_number_immediate(part_off_ex); part_off = get_number_immediate(part_off_ex);
} }
@ -1588,6 +1602,7 @@ static int show_stmt_release(ivl_statement_t net)
if (word_idx != 0) { if (word_idx != 0) {
assert(number_is_immediate(word_idx, IMM_WID, 0)); assert(number_is_immediate(word_idx, IMM_WID, 0));
assert(! number_is_unknown(word_idx));
use_word = get_number_immediate(word_idx); use_word = get_number_immediate(word_idx);
} }