From a809d849c29e2590d36f7354a4c3fca1a1bbc7a4 Mon Sep 17 00:00:00 2001 From: yuex1994 Date: Sun, 7 Jun 2020 02:30:17 +0000 Subject: [PATCH] fix bug: Ilator miscall to_int() function when store constants to memory variable --- src/target-sc/dfs.cc | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/target-sc/dfs.cc b/src/target-sc/dfs.cc index 6aff655b6..d22347b1d 100644 --- a/src/target-sc/dfs.cc +++ b/src/target-sc/dfs.cc @@ -287,9 +287,13 @@ void IlaSim::dfs_binary_op_mem(std::stringstream& dfs_simulator, arg1_str = (arg1_str == "true") ? "1" : (arg1_str == "false") ? "0" : arg1_str; else - arg1_str = (arg1_str == "true") ? "1" : (arg1_str == "false") - ? "0" - : arg1_str + ".to_int()"; + arg1_str = (arg1_str == "true") + ? "1" + : (arg1_str == "false") + ? "0" + : (GetUidExpr(expr->arg(1)) == AST_UID_EXPR::CONST) + ? arg1_str + : arg1_str + ".to_int()"; std::string out_str = "c_" + std::to_string(expr->name().id()); std::string out_type_str = @@ -347,9 +351,14 @@ void IlaSim::dfs_binary_op_mem(std::stringstream& dfs_simulator, arg2_str = (arg2_str == "true") ? "1" : (arg2_str == "false") ? "0" : arg2_str; else - arg2_str = (arg2_str == "true") ? "1" : (arg2_str == "false") - ? "0" - : arg2_str + ".to_int()"; + arg2_str = (arg2_str == "true") + ? "1" + : (arg2_str == "false") + ? "0" + : (GetUidExpr(expr->arg(2)) == AST_UID_EXPR::CONST) + ? arg2_str + + : arg2_str + ".to_int()"; dfs_simulator << indent << "mem_update_map[" << arg1_str << "] = " << arg2_str << ";" << std::endl; }