Skip to content

Commit 475355f

Browse files
authored
Merge pull request #696 from CAS-Atlantic/leaks
ODIN II: removed dead code
2 parents 7298d83 + 56fbc70 commit 475355f

File tree

3 files changed

+1
-276
lines changed

3 files changed

+1
-276
lines changed

ODIN_II/SRC/ast_elaborate.cpp

Lines changed: 0 additions & 263 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,6 @@ void remove_generate(ast_node_t *node)
8080

8181
int simplify_ast_module(ast_node_t **ast_module)
8282
{
83-
/* reduce parameters with their values if they have been set */
84-
reduce_parameter(*ast_module);
8583
/* for loop support */
8684
unroll_loops(ast_module);
8785
/* remove unused node preventing module instantiation */
@@ -113,8 +111,6 @@ void reduce_assignment_expression(ast_node_t *ast_module)
113111
if (check_tree_operation(list_assign[j]->children[1]) && (list_assign[j]->children[1]->num_children > 0))
114112
{
115113
store_exp_list(list_assign[j]->children[1]);
116-
if (deal_with_bracket(list_assign[j]->children[1])) // there are multiple brackets multiplying -- ()*(), stop expanding brackets which may not simplify AST but make it mroe complex
117-
return;
118114

119115
if (simplify_expression())
120116
{
@@ -749,142 +745,6 @@ void free_exp_list()
749745
}
750746
}
751747

752-
/*---------------------------------------------------------------------------
753-
* (function: deal_with_bracket)
754-
*-------------------------------------------------------------------------*/
755-
bool deal_with_bracket(ast_node_t *node)
756-
{
757-
std::vector<int> list_bracket;
758-
759-
recursive_tree(node, list_bracket);
760-
if (!check_mult_bracket(list_bracket)) //if there are brackets multiplying continuously ()*(), stop expanding brackets which may not simplify AST but make it mroe complex
761-
{
762-
for (int i = list_bracket.size()-2; i >= 0; i = i - 2)
763-
delete_bracket(list_bracket[i], list_bracket[i+1]);
764-
return TRUE;
765-
}
766-
767-
return FALSE;
768-
}
769-
770-
/*---------------------------------------------------------------------------
771-
* (function: check_mult_bracket)
772-
* check if the brackets are continuously multiplying
773-
*-------------------------------------------------------------------------*/
774-
bool check_mult_bracket(std::vector<int> list)
775-
{
776-
for (long i = 1; i < list.size() - 2; i = i + 2)
777-
{
778-
enode *node = head;
779-
while (node != NULL && node->next != NULL && node->next->next != NULL)
780-
{
781-
if (node->id == list[i] && node->next->next->id == list[i+1] &&
782-
node->next->flag == 2 &&
783-
(node->next->type.operation == '*' || node->next->type.operation == '/'))
784-
785-
return TRUE;
786-
787-
node = node->next;
788-
}
789-
}
790-
return FALSE;
791-
792-
}
793-
794-
/*---------------------------------------------------------------------------
795-
* (function: recursive_tree)
796-
* search the AST recursively to find brackets
797-
*-------------------------------------------------------------------------*/
798-
void recursive_tree(ast_node_t *node, std::vector<int> list_bracket)
799-
{
800-
if (node && (node->type == BINARY_OPERATION) && (node->types.operation.op == MULTIPLY))
801-
{
802-
for (long i = 0; i < node->num_children; i++)
803-
{
804-
if ((node->children[i]->type == BINARY_OPERATION) && (node->children[i]->types.operation.op == ADD || node->children[i]->types.operation.op == MINUS))
805-
{
806-
find_leaf_node(node->children[i], list_bracket, 0);
807-
find_leaf_node(node->children[i], list_bracket, 1);
808-
}
809-
}
810-
811-
}
812-
813-
for (long i = 0; node && i < node->num_children; i++)
814-
recursive_tree(node->children[i], list_bracket);
815-
816-
}
817-
818-
/*---------------------------------------------------------------------------
819-
* (function: find_lead_node)
820-
*-------------------------------------------------------------------------*/
821-
void find_leaf_node(ast_node_t *node, std::vector<int> list_bracket, int ids2)
822-
{
823-
if (node){
824-
if (node->num_children > 0){
825-
find_leaf_node(node->children[ids2], list_bracket, ids2);
826-
}else{
827-
list_bracket.push_back(node->unique_count);
828-
}
829-
}
830-
}
831-
832-
/*---------------------------------------------------------------------------
833-
* (function: delete_bracket)
834-
*-------------------------------------------------------------------------*/
835-
void delete_bracket(int begin, int end)
836-
{
837-
enode *s1 = NULL, *s2 = NULL, *temp, *p2;
838-
int mark = 0;
839-
for (temp = head; temp != NULL; temp = temp->next)
840-
{
841-
if (temp->id == begin)
842-
{
843-
s1 = temp;
844-
for (p2 = temp; p2 != NULL; p2 = p2->next)
845-
if (p2->id == end)
846-
{
847-
s2 = p2;
848-
mark = 1;
849-
break;
850-
}
851-
}
852-
if (mark == 1)
853-
break;
854-
}
855-
856-
if (s1 == head)
857-
delete_bracket_head(s1, s2);
858-
else
859-
if (s2->next == NULL)
860-
delete_bracket_tail(s1, s2);
861-
else
862-
delete_bracket_body(s1, s2);
863-
if (s1 != head)
864-
check_operation(s1, s2);
865-
866-
}
867-
868-
/*---------------------------------------------------------------------------
869-
* (function: delete_bracket_head)
870-
*-------------------------------------------------------------------------*/
871-
void delete_bracket_head(enode *begin, enode *end)
872-
{
873-
enode *temp;
874-
enode *s = NULL;
875-
for (temp = end; temp != NULL; temp = temp->next)
876-
{
877-
if ((temp->flag == 2) && (temp->priority == 2))
878-
{
879-
s = temp->pre;
880-
break;
881-
}
882-
if (temp->next == NULL)
883-
s = temp;
884-
}
885-
change_exp_list(begin, end, s, 1);
886-
}
887-
888748
/*---------------------------------------------------------------------------
889749
* (function: change_exp_list)
890750
*-------------------------------------------------------------------------*/
@@ -1008,45 +868,6 @@ void copy_enode(enode *node, enode *new_node)
1008868
new_node->id = -1;
1009869
}
1010870

1011-
/*---------------------------------------------------------------------------
1012-
* (function: deleted_bracket_tail)
1013-
*-------------------------------------------------------------------------*/
1014-
void delete_bracket_tail(enode *begin, enode *end)
1015-
{
1016-
enode *temp, *s = NULL;
1017-
for (temp = begin; temp != NULL; temp = temp->pre)
1018-
if ((temp->flag == 2) && (temp->priority == 2)) // '+' or '-'
1019-
{
1020-
s = temp->next;
1021-
break;
1022-
}
1023-
change_exp_list(begin, end, s, 2);
1024-
}
1025-
1026-
/*---------------------------------------------------------------------------
1027-
* (function: delete_bracket_body)
1028-
*-------------------------------------------------------------------------*/
1029-
void delete_bracket_body(enode *begin, enode *end)
1030-
{
1031-
enode *temp;
1032-
if ((begin->pre->priority == 1) && (end->next->priority == 2))
1033-
delete_bracket_tail(begin, end);
1034-
if ((begin->pre->priority == 2) && (end->next->priority == 1))
1035-
delete_bracket_head(begin, end);
1036-
if ((begin->pre->priority == 1) && (end->next->priority == 1))
1037-
{
1038-
delete_bracket_tail(begin, end);
1039-
for (temp = begin; temp != NULL; temp = temp->pre)
1040-
if ((temp->flag == 2) && (temp->priority == 2))
1041-
{
1042-
begin = temp->next;
1043-
break;
1044-
}
1045-
delete_bracket_head(begin, end);
1046-
}
1047-
1048-
}
1049-
1050871
/*---------------------------------------------------------------------------
1051872
* (function: check_tree_operation)
1052873
*-------------------------------------------------------------------------*/
@@ -1085,87 +906,3 @@ void check_operation(enode *begin, enode *end)
1085906
}
1086907
}
1087908
}
1088-
1089-
/*---------------------------------------------------------------------------
1090-
* (function: reduce_parameter)
1091-
* replace parameters with their values in the AST
1092-
*-------------------------------------------------------------------------*/
1093-
void reduce_parameter(ast_node_t *ast_module)
1094-
{
1095-
std::vector<ast_node_t *>para;
1096-
find_parameter(ast_module, para);
1097-
if (ast_module->types.module.is_instantiated == 0 && !para.empty())
1098-
remove_para_node(ast_module, para);
1099-
1100-
1101-
}
1102-
1103-
/*---------------------------------------------------------------------------
1104-
* (function: find_parameter)
1105-
*-------------------------------------------------------------------------*/
1106-
void find_parameter(ast_node_t *node, std::vector<ast_node_t *>para)
1107-
{
1108-
for (long i = 0; node && i < node->num_children; i++)
1109-
{
1110-
if (node->children[i] && node->children[i]->type == VAR_DECLARE && node->children[i]->types.variable.is_parameter == 1)
1111-
para.push_back(node->children[i]);
1112-
1113-
find_parameter(node->children[i], para);
1114-
}
1115-
}
1116-
1117-
/*---------------------------------------------------------------------------
1118-
* (function: remove_para_node)
1119-
*-------------------------------------------------------------------------*/
1120-
void remove_para_node(ast_node_t *top, std::vector<ast_node_t *> para)
1121-
{
1122-
std::vector<ast_node_t *> list;
1123-
1124-
count_assign = 0;
1125-
find_assign_node(top, list, top->children[0]->types.identifier);
1126-
if (count_assign!= 0){
1127-
for (long i = 0; i < para.size(); i++)
1128-
{
1129-
std::string name;
1130-
long value = 0;
1131-
if (para[i] && para[i]->children[0])
1132-
name = para[i]->children[0]->types.identifier;
1133-
1134-
if (node_is_constant(para[i]->children[5]))
1135-
value = para[i]->children[5]->types.vnumber->get_value();
1136-
1137-
for (long j = 0; j < count_assign; j++){
1138-
change_para_node(list[j], name, value);
1139-
}
1140-
1141-
}
1142-
}
1143-
}
1144-
1145-
/*---------------------------------------------------------------------------
1146-
* (function: change_para_node)
1147-
*-------------------------------------------------------------------------*/
1148-
void change_para_node(ast_node_t *node, std::string name, long value)
1149-
{
1150-
if (node && node->type == IDENTIFIERS && name == (std::string) node->types.identifier)
1151-
change_to_number_node(node, value);
1152-
1153-
for (long i = 0; node && i < node->num_children; i++)
1154-
change_para_node(node->children[i], name, value);
1155-
}
1156-
1157-
/*---------------------------------------------------------------------------
1158-
* (function: check_intermediate_variable)
1159-
* check if there are intermediate variables
1160-
*-------------------------------------------------------------------------*/
1161-
short has_intermediate_variable(ast_node_t *node){
1162-
if (node && (node->is_read_write == 1 || node->is_read_write == 2))
1163-
return TRUE;
1164-
1165-
for (long i = 0; node && i < node->num_children; i++){
1166-
if(has_intermediate_variable(node->children[i]))
1167-
return TRUE;
1168-
}
1169-
1170-
return FALSE;
1171-
}

ODIN_II/SRC/include/ast_elaborate.h

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -60,23 +60,10 @@ int check_exp_list(enode *tail);
6060
void create_ast_node(enode *temp, ast_node_t *node, int line_num, int file_num);
6161
void create_op_node(ast_node_t *node, enode *temp, int line_num, int file_num);
6262
void free_exp_list();
63-
bool deal_with_bracket(ast_node_t *node);
64-
void recursive_tree(ast_node_t *node, std::vector<int> list_bracket);
65-
void find_leaf_node(ast_node_t *node, std::vector<int> list_bracket, int ids2);
66-
void delete_bracket(int beign, int end);
67-
void delete_bracket_head(enode *begin, enode *end);
6863
void change_exp_list(enode *beign, enode *end, enode *s, int flag);
6964
enode *copy_enode_list(enode *new_head, enode *begin, enode *end);
7065
void copy_enode(enode *node, enode *new_node);
71-
void delete_bracket_tail(enode *begin, enode *end);
72-
void delete_bracket_body(enode *begin, enode *end);
7366
bool check_tree_operation(ast_node_t *node);
74-
void reduce_parameter();
75-
void reduce_parameter(ast_node_t *ast_module);
76-
void find_parameter(ast_node_t *top, std::vector<ast_node_t *>para);
77-
void remove_para_node(ast_node_t *top, std::vector<ast_node_t *>para);
78-
void change_para_node(ast_node_t *node, std::string name, long value);
7967
void check_operation(enode *begin, enode *end);
8068
bool check_mult_bracket(std::vector<int> list);
81-
short has_intermediate_variable(ast_node_t *node);
8269

ODIN_II/SRC/netlist_create_from_ast.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,7 @@ ast_node_t *find_top_module()
526526
module_name_list = std::string("\t") + current_module;
527527
found_top = i;
528528
found_desired_module = true;
529+
number_of_top_modules = 1;
529530
break;
530531
}
531532
else if ((ast_modules[i]->types.module.is_instantiated == FALSE))

0 commit comments

Comments
 (0)