Move pform_set_reg_idx() into pform_makewire()

`pform_set_reg_idx()` is always called right after `pform_makewire()`. Move
it into the function. This avoids the extra lookup that
`pform_set_reg_idx()` does to get the PWire from the name.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
This commit is contained in:
Lars-Peter Clausen 2022-03-11 11:06:53 +01:00
parent 7aee124cfe
commit 52da910313
4 changed files with 9 additions and 26 deletions

View File

@ -5833,8 +5833,7 @@ dimensions
net_variable
: IDENTIFIER dimensions_opt
{ perm_string name = lex_strings.make($1);
pform_makewire(@1, name, NetNet::IMPLICIT, IVL_VT_NO_TYPE);
pform_set_reg_idx(name, $2);
pform_makewire(@1, name, NetNet::IMPLICIT, IVL_VT_NO_TYPE, $2);
$$ = $1;
}
;

View File

@ -2742,7 +2742,7 @@ static PWire* pform_get_or_make_wire(const vlltype&li, perm_string name,
* this one to create the wire and stash it.
*/
void pform_makewire(const vlltype&li, perm_string name, NetNet::Type type,
ivl_variable_type_t dt)
ivl_variable_type_t dt, std::list<pform_range_t> *indices)
{
PWire*cur = pform_get_or_make_wire(li, name, type, NetNet::NOT_A_PORT,
dt);
@ -2765,6 +2765,9 @@ void pform_makewire(const vlltype&li, perm_string name, NetNet::Type type,
default:
break;
}
if (indices && !indices->empty())
cur->set_unpacked_idx(*indices);
}
void pform_makewire(const struct vlltype&li,
@ -2785,8 +2788,7 @@ void pform_makewire(const struct vlltype&li,
for (list<decl_assignment_t*>::iterator cur = assign_list->begin()
; cur != assign_list->end() ; ++ cur) {
decl_assignment_t* curp = *cur;
pform_makewire(li, curp->name, type, IVL_VT_NO_TYPE);
pform_set_reg_idx(curp->name, &curp->index);
pform_makewire(li, curp->name, type, IVL_VT_NO_TYPE, &curp->index);
names->push_back(curp->name);
}
@ -3068,22 +3070,6 @@ void pform_set_type_attrib(perm_string name, const string&key,
(*udp).second ->attributes[key] = new PEString(value);
}
/*
* This function attaches a memory index range to an existing
* register. (The named wire must be a register.
*/
void pform_set_reg_idx(perm_string name, list<pform_range_t>*indices)
{
PWire*cur = lexical_scope->wires_find(name);
if (cur == 0) {
VLerror("internal error: name is not a valid memory for index.");
return;
}
if (indices && !indices->empty())
cur->set_unpacked_idx(*indices);
}
LexicalScope::range_t* pform_parameter_value_range(bool exclude_flag,
bool low_open, PExpr*low_expr,
bool hig_open, PExpr*hig_expr)

View File

@ -349,7 +349,8 @@ extern PForeach* pform_make_foreach(const struct vlltype&loc,
*/
extern void pform_makewire(const struct vlltype&li, perm_string name,
NetNet::Type type,
ivl_variable_type_t dt);
ivl_variable_type_t dt,
std::list<pform_range_t> *indices);
/* This form handles assignment declarations. */
@ -379,9 +380,6 @@ extern void pform_set_port_type(const struct vlltype&li,
data_type_t*dt,
std::list<named_pexpr_t>*attr);
extern void pform_set_reg_idx(perm_string name,
std::list<pform_range_t>*indices);
extern void pform_set_data_type(const struct vlltype&li, data_type_t*, std::list<perm_string>*names, NetNet::Type net_type, std::list<named_pexpr_t>*attr);
extern void pform_set_string_type(const struct vlltype&li, const string_type_t*string_type, std::list<perm_string>*names, NetNet::Type net_type, std::list<named_pexpr_t>*attr);

View File

@ -195,7 +195,7 @@ void pform_attach_discipline(const struct vlltype&loc,
PWire* cur_net = pform_get_wire_in_scope(*cur);
if (cur_net == 0) {
/* Not declared yet, declare it now. */
pform_makewire(loc, *cur, NetNet::WIRE, IVL_VT_REAL);
pform_makewire(loc, *cur, NetNet::WIRE, IVL_VT_REAL, 0);
cur_net = pform_get_wire_in_scope(*cur);
assert(cur_net);
}