From 5e0dee1c7b1a82830cef2175592cac2d3d88e413 Mon Sep 17 00:00:00 2001 From: Nick Gasson Date: Sun, 4 Jul 2021 21:19:14 +0800 Subject: [PATCH] Remove VCODE_OP_NETS --- src/cgen.c | 42 --------------------------------- src/elab.c | 3 ++- src/vcode.c | 59 ++--------------------------------------------- src/vcode.h | 2 -- test/test_lower.c | 3 +-- 5 files changed, 5 insertions(+), 104 deletions(-) diff --git a/src/cgen.c b/src/cgen.c index ef364e18..145d68e2 100644 --- a/src/cgen.c +++ b/src/cgen.c @@ -1887,45 +1887,6 @@ static void cgen_op_resolved_address(int op, cgen_ctx_t *ctx) LLVMBuildStore(builder, cast, cgen_get_var(shadow, ctx)); } -static void cgen_op_nets(int op, cgen_ctx_t *ctx) -{ - vcode_signal_t sig = vcode_get_signal(op); - - vcode_reg_t result = vcode_get_result(op); -#if 0 - ctx->regs[result] = cgen_signal_nets(sig); - LLVMSetValueName(ctx->regs[result], cgen_reg_name(result)); -#else - int hops = 1; - - vcode_state_t state; - vcode_state_save(&state); - - for (int i = 0; i < hops; i++) - vcode_select_unit(vcode_unit_context()); - - const int nvars = vcode_count_vars(); - const int nparams = vcode_count_params(); - - vcode_state_restore(&state); - - const unsigned off = nvars + nparams + sig; - - LLVMValueRef display = cgen_display_upref(1, ctx); - LLVMValueRef sig_struct = LLVMBuildStructGEP(builder, display, off, ""); - LLVMValueRef sid_ptr = LLVMBuildStructGEP(builder, sig_struct, 0, ""); - LLVMValueRef sid_val = LLVMBuildLoad(builder, sid_ptr, ""); - - LLVMTypeRef elems[] = { LLVMInt32Type(), LLVMInt32Type() }; - LLVMTypeRef sigptr_type = LLVMStructType(elems, 2, false); - - LLVMValueRef sigptr = LLVMGetUndef(sigptr_type); - sigptr = LLVMBuildInsertValue(builder, sigptr, sid_val, 0, ""); - ctx->regs[result] = LLVMBuildInsertValue(builder, sigptr, llvm_int32(0), 1, - cgen_reg_name(result)); -#endif -} - static void cgen_op_resolved(int op, cgen_ctx_t *ctx) { vcode_reg_t result = vcode_get_result(op); @@ -3083,9 +3044,6 @@ static void cgen_op(int i, cgen_ctx_t *ctx) case VCODE_OP_RESOLVED_ADDRESS: cgen_op_resolved_address(i, ctx); break; - case VCODE_OP_NETS: - cgen_op_nets(i, ctx); - break; case VCODE_OP_RESOLVED: cgen_op_resolved(i, ctx); break; diff --git a/src/elab.c b/src/elab.c index bf0a72d2..00abe5ed 100644 --- a/src/elab.c +++ b/src/elab.c @@ -2647,7 +2647,7 @@ static void drv_extract(e_node_t proc, elab_ctx_t *ctx) regs[result].tag = UNKNOWN; } break; - +#if 0 case VCODE_OP_NETS: { vcode_signal_t vs = vcode_get_signal(op); @@ -2672,6 +2672,7 @@ static void drv_extract(e_node_t proc, elab_ctx_t *ctx) regs[result].signal = signal; } break; +#endif case VCODE_OP_RETURN: case VCODE_OP_COMMENT: diff --git a/src/vcode.c b/src/vcode.c index 3d61e064..ee05f80a 100644 --- a/src/vcode.c +++ b/src/vcode.c @@ -53,7 +53,7 @@ DECLARE_AND_DEFINE_ARRAY(vcode_type); #define OP_HAS_VALUE(x) \ (x == VCODE_OP_CONST) #define OP_HAS_SIGNAL(x) \ - (x == VCODE_OP_NETS || x == VCODE_OP_RESOLVED_ADDRESS \ + (x == VCODE_OP_RESOLVED_ADDRESS \ || x == VCODE_OP_SET_INITIAL || x == VCODE_OP_NEEDS_LAST_VALUE \ || x == VCODE_OP_RESOLVED) #define OP_HAS_DIM(x) \ @@ -497,10 +497,6 @@ void vcode_heap_allocate(vcode_reg_t reg) // Must have been allocated on the heap break; - case VCODE_OP_NETS: - // Pointer to a global - break; - case VCODE_OP_NEW: // On the heap by definition break; @@ -716,7 +712,6 @@ void vcode_opt(void) case VCODE_OP_MUL: case VCODE_OP_CMP: case VCODE_OP_INDEX: - case VCODE_OP_NETS: case VCODE_OP_WRAP: case VCODE_OP_VEC_LOAD: case VCODE_OP_TEMP_STACK_MARK: @@ -1057,7 +1052,7 @@ const char *vcode_op_string(vcode_op_t op) static const char *strs[] = { "cmp", "fcall", "wait", "const", "assert", "jump", "load", "store", "mul", "add", "bounds", "comment", "const array", "index", "sub", - "cast", "load indirect", "store indirect", "return", "nets", + "cast", "load indirect", "store indirect", "return", "sched waveform", "cond", "report", "div", "neg", "exp", "abs", "mod", "rem", "image", "alloca", "select", "or", "wrap", "uarray left", "uarray right", "uarray dir", "unwrap", "not", "and", "nested fcall", @@ -1678,16 +1673,6 @@ void vcode_dump_with_mark(int mark_op, vcode_dump_fn_t callback, void *arg) } break; - case VCODE_OP_NETS: - { - col += vcode_dump_reg(op->result); - col += color_printf(" := %s $white$%s$$", - vcode_op_string(op->kind), - istr(vcode_signal_name(op->signal))); - vcode_dump_result_type(col, op); - } - break; - case VCODE_OP_SCHED_WAVEFORM: { printf("%s ", vcode_op_string(op->kind)); @@ -3768,46 +3753,6 @@ void emit_return(vcode_reg_t reg) } } -vcode_reg_t emit_nets(vcode_reg_t sig_ptr) -{ -#if 0 - block_t *b = &(active_unit->blocks.items[active_block]); - for (int i = b->ops.count - 1; i >= 0; i--) { - const op_t *op = &(b->ops.items[i]); - if (op->kind == VCODE_OP_NETS && op->args.items[0] == sig_ptr) - return op->result; - } - - op_t *op = vcode_add_op(VCODE_OP_NETS); - vcode_add_arg(op, sig_ptr); - - vcode_type_t ptype = vcode_reg_type(sig_ptr); - - VCODE_ASSERT(vtype_kind(ptype) == VCODE_TYPE_POINTER - && vtype_kind(vtype_pointed(ptype)) == VCODE_TYPE_SIGNAL, - "arguments to nets must be pointer to signal"); - - vcode_type_t stype = vcode_signal_type(sig); - op->type = stype; - - VCODE_ASSERT(vtype_kind(stype) == VCODE_TYPE_SIGNAL, - "argument to nets is not a signal"); - - vcode_type_t base = vtype_base(stype); - if (vtype_kind(base) == VCODE_TYPE_CARRAY) - op->type = vtype_signal(vtype_elem(base)); - - op->result = vcode_add_reg(op->type); - - reg_t *rr = vcode_reg_data(op->result); - rr->bounds = vcode_signal_bounds(sig); - - return op->result; -#else - return VCODE_INVALID_REG; -#endif -} - vcode_reg_t emit_resolved(vcode_reg_t sig) { block_t *b = &(active_unit->blocks.items[active_block]); diff --git a/src/vcode.h b/src/vcode.h index 44190052..2a1408e5 100644 --- a/src/vcode.h +++ b/src/vcode.h @@ -58,7 +58,6 @@ typedef enum { VCODE_OP_LOAD_INDIRECT, VCODE_OP_STORE_INDIRECT, VCODE_OP_RETURN, - VCODE_OP_NETS, VCODE_OP_SCHED_WAVEFORM, VCODE_OP_COND, VCODE_OP_REPORT, @@ -393,7 +392,6 @@ void emit_dynamic_index_check(vcode_reg_t rlow, vcode_reg_t rhigh, vcode_reg_t emit_index(vcode_var_t var, vcode_reg_t offset); vcode_reg_t emit_cast(vcode_type_t type, vcode_reg_t bounds, vcode_reg_t reg); void emit_return(vcode_reg_t reg); -vcode_reg_t emit_nets(vcode_reg_t sig_ptr); vcode_reg_t emit_resolved(vcode_reg_t sig); void emit_sched_waveform(vcode_reg_t nets, vcode_reg_t nnets, vcode_reg_t values, vcode_reg_t reject, diff --git a/test/test_lower.c b/test/test_lower.c index 52a64fd4..0115c4c3 100644 --- a/test/test_lower.c +++ b/test/test_lower.c @@ -170,7 +170,6 @@ static void check_bb(int bb, const check_bb_t *expect, int len) } break; - case VCODE_OP_NETS: case VCODE_OP_RESOLVED_ADDRESS: case VCODE_OP_NEEDS_LAST_VALUE: { @@ -1137,7 +1136,7 @@ START_TEST(test_signal2) EXPECT_BB(1) = { { VCODE_OP_CONST, .value = 2 }, - { VCODE_OP_NETS, .name = ":signal2:x" }, + //{ VCODE_OP_NETS, .name = ":signal2:x" }, { VCODE_OP_CONST, .value = 1 }, { VCODE_OP_EVENT }, { VCODE_OP_ASSERT }, -- 2.39.2