From 9de4d4430556f2aa5a3d2520138246bfa18472f1 Mon Sep 17 00:00:00 2001 From: Zachary Snow Date: Sat, 24 Dec 2022 00:42:12 -0700 Subject: [PATCH] simplify handles shadowing via vars and genvars --- src/Convert/Simplify.hs | 8 ++++++-- test/basic/simplify_arg_shadow.sv | 8 ++++++++ test/basic/simplify_genvar_shadow.sv | 8 ++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 test/basic/simplify_arg_shadow.sv create mode 100644 test/basic/simplify_genvar_shadow.sv diff --git a/src/Convert/Simplify.hs b/src/Convert/Simplify.hs index a28a3f1..75ea48f 100644 --- a/src/Convert/Simplify.hs +++ b/src/Convert/Simplify.hs @@ -42,6 +42,8 @@ traverseDeclM decl = do where t = IntegerVector TLogic sg rs Param Localparam t x e -> insertExpr x $ Cast (Left t) e + Variable _ _ x _ _ -> insertElem x Nil + Net _ _ _ _ x _ _ -> insertElem x Nil _ -> return () return decl' @@ -66,6 +68,8 @@ isSimpleExpr (Cast Left{} e) = isSimpleExpr e isSimpleExpr _ = False traverseModuleItemM :: ModuleItem -> Scoper Expr ModuleItem +traverseModuleItemM (Genvar x) = + insertElem x Nil >> return (Genvar x) traverseModuleItemM (Instance m p x rs l) = do p' <- mapM paramBindingMapper p traverseExprsM traverseExprM $ Instance m p' x rs l @@ -147,8 +151,8 @@ substitute scopes expr = substitute' :: Expr -> Expr substitute' (Ident x) = case lookupElem scopes x of - Nothing -> Ident x - Just (_, _, e) -> e + Just (_, _, e) | e /= Nil -> e + _ -> Ident x substitute' other = traverseSinglyNestedExprs substitute' other diff --git a/test/basic/simplify_arg_shadow.sv b/test/basic/simplify_arg_shadow.sv new file mode 100644 index 0000000..529d7b3 --- /dev/null +++ b/test/basic/simplify_arg_shadow.sv @@ -0,0 +1,8 @@ +module top; + localparam i = 1234; + function automatic integer f; + input integer i; + f = i + 1; + endfunction + initial $display(i, f(0), f(i + 1)); +endmodule diff --git a/test/basic/simplify_genvar_shadow.sv b/test/basic/simplify_genvar_shadow.sv new file mode 100644 index 0000000..6502efa --- /dev/null +++ b/test/basic/simplify_genvar_shadow.sv @@ -0,0 +1,8 @@ +module top; + localparam i = 1234; + if (1) begin + genvar i; + for (i = 0; i < 10; i = i + 1) + initial $display(i > 5 ? i + 100 : i - 100); + end +endmodule