@@ -80,8 +80,6 @@ void remove_generate(ast_node_t *node)
80
80
81
81
int simplify_ast_module (ast_node_t **ast_module)
82
82
{
83
- /* reduce parameters with their values if they have been set */
84
- reduce_parameter (*ast_module);
85
83
/* for loop support */
86
84
unroll_loops (ast_module);
87
85
/* remove unused node preventing module instantiation */
@@ -113,8 +111,6 @@ void reduce_assignment_expression(ast_node_t *ast_module)
113
111
if (check_tree_operation (list_assign[j]->children [1 ]) && (list_assign[j]->children [1 ]->num_children > 0 ))
114
112
{
115
113
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 ;
118
114
119
115
if (simplify_expression ())
120
116
{
@@ -749,142 +745,6 @@ void free_exp_list()
749
745
}
750
746
}
751
747
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
-
888
748
/* ---------------------------------------------------------------------------
889
749
* (function: change_exp_list)
890
750
*-------------------------------------------------------------------------*/
@@ -1008,45 +868,6 @@ void copy_enode(enode *node, enode *new_node)
1008
868
new_node->id = -1 ;
1009
869
}
1010
870
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
-
1050
871
/* ---------------------------------------------------------------------------
1051
872
* (function: check_tree_operation)
1052
873
*-------------------------------------------------------------------------*/
@@ -1085,87 +906,3 @@ void check_operation(enode *begin, enode *end)
1085
906
}
1086
907
}
1087
908
}
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
- }
0 commit comments