Skip to content

Commit

Permalink
Improve duplicate check when generating sensitivity list
Browse files Browse the repository at this point in the history
  • Loading branch information
nickg committed Apr 25, 2024
1 parent 24f814c commit 56629c3
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 9 deletions.
15 changes: 6 additions & 9 deletions src/simp.c
Original file line number Diff line number Diff line change
Expand Up @@ -621,15 +621,12 @@ static void simp_build_wait_cb(tree_t expr, void *ctx)
{
tree_t wait = ctx;

if (tree_kind(expr) == T_REF) {
// Check for duplicates
tree_t decl = tree_ref(expr);
const int ntriggers = tree_triggers(wait);
for (int i = 0; i < ntriggers; i++) {
tree_t t = tree_trigger(wait, i);
if (tree_kind(t) == T_REF && tree_ref(t) == decl)
return;
}
// Check for duplicates
const int ntriggers = tree_triggers(wait);
for (int i = 0; i < ntriggers; i++) {
tree_t t = tree_trigger(wait, i);
if (same_tree(t, expr))
return;
}

tree_add_trigger(wait, expr);
Expand Down
6 changes: 6 additions & 0 deletions test/simp/allsens.vhd
Original file line number Diff line number Diff line change
Expand Up @@ -76,4 +76,10 @@ begin

p15: x <= c(n); -- n

p16: process (all) is -- v(1)
begin
v(2) <= v(1);
v(3) <= v(1);
end process;

end architecture;
9 changes: 9 additions & 0 deletions test/test_simp.c
Original file line number Diff line number Diff line change
Expand Up @@ -862,6 +862,15 @@ START_TEST(test_allsens)
e = tree_trigger(w, 0);
fail_unless(tree_kind(e) == T_REF);
fail_unless(tree_ident(e) == ident_new("N"));

// P16: v(1)
w = tree_stmt(tree_stmt(a, 16), 2);
fail_unless(tree_kind(w) == T_WAIT);
fail_unless(tree_triggers(w) == 1);
e = tree_trigger(w, 0);
fail_unless(tree_kind(e) == T_ARRAY_REF);
fail_unless(tree_kind(tree_value(tree_param(e, 0))) == T_LITERAL);
fail_unless(tree_ident(tree_value(e)) == ident_new("V"));
}
END_TEST

Expand Down

0 comments on commit 56629c3

Please sign in to comment.