1 /* This C file is generated by NIT to compile module dead_method_removal. */
2 #include "dead_method_removal._sep.h"
3 val_t
dead_method_removal___Program___nb_removed_iroutines(val_t p0
){
4 struct {struct stack_frame_t me
;} fra
;
7 fra
.me
.prev
= stack_frame_head
; stack_frame_head
= &fra
.me
;
8 fra
.me
.file
= LOCATE_dead_method_removal
;
10 fra
.me
.meth
= LOCATE_dead_method_removal___Program___nb_removed_iroutines
;
13 fra
.me
.REG
[0] = NIT_NULL
;
15 /* ./analysis//dead_method_removal.nit:23 */
16 REGB0
= TAG_Bool(ATTR_dead_method_removal___Program____nb_removed_iroutines(fra
.me
.REG
[0])!=NIT_NULL
);
17 if (UNTAG_Bool(REGB0
)) {
19 nit_abort("Uninitialized attribute %s", "_nb_removed_iroutines", LOCATE_dead_method_removal
, 23);
21 REGB0
= ATTR_dead_method_removal___Program____nb_removed_iroutines(fra
.me
.REG
[0]);
22 stack_frame_head
= fra
.me
.prev
;
25 val_t
dead_method_removal___Program___nb_not_removed_iroutines(val_t p0
){
26 struct {struct stack_frame_t me
;} fra
;
29 fra
.me
.prev
= stack_frame_head
; stack_frame_head
= &fra
.me
;
30 fra
.me
.file
= LOCATE_dead_method_removal
;
32 fra
.me
.meth
= LOCATE_dead_method_removal___Program___nb_not_removed_iroutines
;
35 fra
.me
.REG
[0] = NIT_NULL
;
37 /* ./analysis//dead_method_removal.nit:24 */
38 REGB0
= TAG_Bool(ATTR_dead_method_removal___Program____nb_not_removed_iroutines(fra
.me
.REG
[0])!=NIT_NULL
);
39 if (UNTAG_Bool(REGB0
)) {
41 nit_abort("Uninitialized attribute %s", "_nb_not_removed_iroutines", LOCATE_dead_method_removal
, 24);
43 REGB0
= ATTR_dead_method_removal___Program____nb_not_removed_iroutines(fra
.me
.REG
[0]);
44 stack_frame_head
= fra
.me
.prev
;
47 void dead_method_removal___Program___optimize_dead_methods(val_t p0
){
48 struct {struct stack_frame_t me
;} fra
;
50 fra
.me
.prev
= stack_frame_head
; stack_frame_head
= &fra
.me
;
51 fra
.me
.file
= LOCATE_dead_method_removal
;
53 fra
.me
.meth
= LOCATE_dead_method_removal___Program___optimize_dead_methods
;
56 fra
.me
.REG
[0] = NIT_NULL
;
58 CALL_program___Program___with_each_iroutines(fra
.me
.REG
[0])(fra
.me
.REG
[0], (&(fra
.me
)), ((fun_t
)OC_dead_method_removal___Program___optimize_dead_methods_1
));
59 stack_frame_head
= fra
.me
.prev
;
62 void OC_dead_method_removal___Program___optimize_dead_methods_1(struct stack_frame_t
*closctx
, val_t p0
, val_t p1
){
63 struct {struct stack_frame_t me
; val_t MORE_REG
[2];} fra
;
67 /* ./analysis//dead_method_removal.nit:29 */
68 fra
.me
.prev
= stack_frame_head
; stack_frame_head
= &fra
.me
;
69 fra
.me
.file
= LOCATE_dead_method_removal
;
71 fra
.me
.meth
= LOCATE_dead_method_removal___Program___optimize_dead_methods
;
74 fra
.me
.REG
[0] = NIT_NULL
;
75 fra
.me
.REG
[1] = NIT_NULL
;
76 fra
.me
.REG
[2] = NIT_NULL
;
79 /* ./analysis//dead_method_removal.nit:30 */
80 fra
.me
.REG
[2] = CALL_reachable_method_analysis___Program___rma(closctx
->REG
[0])(closctx
->REG
[0]);
81 REGB0
= TAG_Bool(fra
.me
.REG
[2]==NIT_NULL
);
82 if (UNTAG_Bool(REGB0
)) {
83 nit_abort("Reciever is null", NULL
, LOCATE_dead_method_removal
, 30);
85 REGB0
= CALL_reachable_method_analysis___ReachableMethodAnalysis___is_iroutine_reachable(fra
.me
.REG
[2])(fra
.me
.REG
[2], fra
.me
.REG
[0]);
86 REGB0
= TAG_Bool(!UNTAG_Bool(REGB0
));
87 if (UNTAG_Bool(REGB0
)) {
88 /* ./analysis//dead_method_removal.nit:31 */
89 CALL_dead_method_removal___IRoutine___set_not_reachable(fra
.me
.REG
[0])(fra
.me
.REG
[0], fra
.me
.REG
[1]);
90 /* ./analysis//dead_method_removal.nit:32 */
91 REGB0
= CALL_dead_method_removal___Program___nb_removed_iroutines(closctx
->REG
[0])(closctx
->REG
[0]);
93 /* ./../lib/standard//kernel.nit:215 */
94 REGB1
= TAG_Int(UNTAG_Int(REGB0
)+UNTAG_Int(REGB1
));
95 /* ./analysis//dead_method_removal.nit:32 */
96 ATTR_dead_method_removal___Program____nb_removed_iroutines(closctx
->REG
[0]) = REGB1
;
98 /* ./analysis//dead_method_removal.nit:34 */
99 REGB1
= CALL_dead_method_removal___Program___nb_not_removed_iroutines(closctx
->REG
[0])(closctx
->REG
[0]);
101 /* ./../lib/standard//kernel.nit:215 */
102 REGB0
= TAG_Int(UNTAG_Int(REGB1
)+UNTAG_Int(REGB0
));
103 /* ./analysis//dead_method_removal.nit:34 */
104 ATTR_dead_method_removal___Program____nb_not_removed_iroutines(closctx
->REG
[0]) = REGB0
;
106 stack_frame_head
= fra
.me
.prev
;
109 void dead_method_removal___Program___dump_dead_method_optimization(val_t p0
, val_t p1
){
110 struct {struct stack_frame_t me
; val_t MORE_REG
[3];} fra
;
113 static val_t once_value_1
; /* Once value */
114 static val_t once_value_2
; /* Once value */
115 static val_t once_value_3
; /* Once value */
116 static val_t once_value_4
; /* Once value */
117 static val_t once_value_5
; /* Once value */
118 static val_t once_value_6
; /* Once value */
119 static val_t once_value_7
; /* Once value */
120 fra
.me
.prev
= stack_frame_head
; stack_frame_head
= &fra
.me
;
121 fra
.me
.file
= LOCATE_dead_method_removal
;
123 fra
.me
.meth
= LOCATE_dead_method_removal___Program___dump_dead_method_optimization
;
124 fra
.me
.has_broke
= 0;
126 fra
.me
.REG
[0] = NIT_NULL
;
127 fra
.me
.REG
[1] = NIT_NULL
;
128 fra
.me
.REG
[2] = NIT_NULL
;
129 fra
.me
.REG
[3] = NIT_NULL
;
132 /* ./analysis//dead_method_removal.nit:41 */
134 fra
.me
.REG
[2] = NEW_Array_array___Array___with_capacity(REGB0
);
136 fra
.me
.REG
[3] = BOX_NativeString("");
138 fra
.me
.REG
[3] = NEW_String_string___String___with_native(fra
.me
.REG
[3], REGB0
);
139 once_value_1
= fra
.me
.REG
[3];
140 register_static_object(&once_value_1
);
141 } else fra
.me
.REG
[3] = once_value_1
;
142 fra
.me
.REG
[3] = fra
.me
.REG
[3];
143 CALL_abstract_collection___SimpleCollection___add(fra
.me
.REG
[2])(fra
.me
.REG
[2], fra
.me
.REG
[3]);
144 CALL_abstract_collection___SimpleCollection___add(fra
.me
.REG
[2])(fra
.me
.REG
[2], fra
.me
.REG
[1]);
146 fra
.me
.REG
[1] = BOX_NativeString("/");
148 fra
.me
.REG
[1] = NEW_String_string___String___with_native(fra
.me
.REG
[1], REGB0
);
149 once_value_2
= fra
.me
.REG
[1];
150 register_static_object(&once_value_2
);
151 } else fra
.me
.REG
[1] = once_value_2
;
152 fra
.me
.REG
[1] = fra
.me
.REG
[1];
153 CALL_abstract_collection___SimpleCollection___add(fra
.me
.REG
[2])(fra
.me
.REG
[2], fra
.me
.REG
[1]);
154 fra
.me
.REG
[1] = CALL_program___Program___main_module(fra
.me
.REG
[0])(fra
.me
.REG
[0]);
155 fra
.me
.REG
[1] = CALL_abstractmetamodel___MMModule___name(fra
.me
.REG
[1])(fra
.me
.REG
[1]);
156 fra
.me
.REG
[1] = CALL_string___Object___to_s(fra
.me
.REG
[1])(fra
.me
.REG
[1]);
157 CALL_abstract_collection___SimpleCollection___add(fra
.me
.REG
[2])(fra
.me
.REG
[2], fra
.me
.REG
[1]);
159 fra
.me
.REG
[1] = BOX_NativeString(".dmr_opt.log");
161 fra
.me
.REG
[1] = NEW_String_string___String___with_native(fra
.me
.REG
[1], REGB0
);
162 once_value_3
= fra
.me
.REG
[1];
163 register_static_object(&once_value_3
);
164 } else fra
.me
.REG
[1] = once_value_3
;
165 fra
.me
.REG
[1] = fra
.me
.REG
[1];
166 CALL_abstract_collection___SimpleCollection___add(fra
.me
.REG
[2])(fra
.me
.REG
[2], fra
.me
.REG
[1]);
167 fra
.me
.REG
[2] = CALL_string___Object___to_s(fra
.me
.REG
[2])(fra
.me
.REG
[2]);
168 fra
.me
.REG
[2] = NEW_OFStream_file___OFStream___open(fra
.me
.REG
[2]);
169 /* ./analysis//dead_method_removal.nit:43 */
171 fra
.me
.REG
[1] = NEW_Array_array___Array___with_capacity(REGB0
);
173 fra
.me
.REG
[3] = BOX_NativeString("Nb. dead iroutines removed: ");
175 fra
.me
.REG
[3] = NEW_String_string___String___with_native(fra
.me
.REG
[3], REGB0
);
176 once_value_4
= fra
.me
.REG
[3];
177 register_static_object(&once_value_4
);
178 } else fra
.me
.REG
[3] = once_value_4
;
179 fra
.me
.REG
[3] = fra
.me
.REG
[3];
180 CALL_abstract_collection___SimpleCollection___add(fra
.me
.REG
[1])(fra
.me
.REG
[1], fra
.me
.REG
[3]);
181 REGB0
= CALL_dead_method_removal___Program___nb_removed_iroutines(fra
.me
.REG
[0])(fra
.me
.REG
[0]);
182 fra
.me
.REG
[3] = CALL_string___Object___to_s(REGB0
)(REGB0
);
183 CALL_abstract_collection___SimpleCollection___add(fra
.me
.REG
[1])(fra
.me
.REG
[1], fra
.me
.REG
[3]);
185 fra
.me
.REG
[3] = BOX_NativeString("\n");
187 fra
.me
.REG
[3] = NEW_String_string___String___with_native(fra
.me
.REG
[3], REGB0
);
188 once_value_5
= fra
.me
.REG
[3];
189 register_static_object(&once_value_5
);
190 } else fra
.me
.REG
[3] = once_value_5
;
191 fra
.me
.REG
[3] = fra
.me
.REG
[3];
192 CALL_abstract_collection___SimpleCollection___add(fra
.me
.REG
[1])(fra
.me
.REG
[1], fra
.me
.REG
[3]);
193 fra
.me
.REG
[1] = CALL_string___Object___to_s(fra
.me
.REG
[1])(fra
.me
.REG
[1]);
194 CALL_stream___OStream___write(fra
.me
.REG
[2])(fra
.me
.REG
[2], fra
.me
.REG
[1]);
195 /* ./analysis//dead_method_removal.nit:44 */
197 fra
.me
.REG
[1] = NEW_Array_array___Array___with_capacity(REGB0
);
199 fra
.me
.REG
[3] = BOX_NativeString("Nb. live iroutines: ");
201 fra
.me
.REG
[3] = NEW_String_string___String___with_native(fra
.me
.REG
[3], REGB0
);
202 once_value_6
= fra
.me
.REG
[3];
203 register_static_object(&once_value_6
);
204 } else fra
.me
.REG
[3] = once_value_6
;
205 fra
.me
.REG
[3] = fra
.me
.REG
[3];
206 CALL_abstract_collection___SimpleCollection___add(fra
.me
.REG
[1])(fra
.me
.REG
[1], fra
.me
.REG
[3]);
207 REGB0
= CALL_dead_method_removal___Program___nb_not_removed_iroutines(fra
.me
.REG
[0])(fra
.me
.REG
[0]);
208 fra
.me
.REG
[0] = CALL_string___Object___to_s(REGB0
)(REGB0
);
209 CALL_abstract_collection___SimpleCollection___add(fra
.me
.REG
[1])(fra
.me
.REG
[1], fra
.me
.REG
[0]);
211 fra
.me
.REG
[0] = BOX_NativeString("\n");
213 fra
.me
.REG
[0] = NEW_String_string___String___with_native(fra
.me
.REG
[0], REGB0
);
214 once_value_7
= fra
.me
.REG
[0];
215 register_static_object(&once_value_7
);
216 } else fra
.me
.REG
[0] = once_value_7
;
217 fra
.me
.REG
[0] = fra
.me
.REG
[0];
218 CALL_abstract_collection___SimpleCollection___add(fra
.me
.REG
[1])(fra
.me
.REG
[1], fra
.me
.REG
[0]);
219 fra
.me
.REG
[1] = CALL_string___Object___to_s(fra
.me
.REG
[1])(fra
.me
.REG
[1]);
220 CALL_stream___OStream___write(fra
.me
.REG
[2])(fra
.me
.REG
[2], fra
.me
.REG
[1]);
221 /* ./analysis//dead_method_removal.nit:46 */
222 CALL_stream___IOS___close(fra
.me
.REG
[2])(fra
.me
.REG
[2]);
223 stack_frame_head
= fra
.me
.prev
;
226 void dead_method_removal___IRoutine___set_not_reachable(val_t p0
, val_t p1
){
227 struct {struct stack_frame_t me
; val_t MORE_REG
[2];} fra
;
230 static val_t once_value_1
; /* Once value */
231 fra
.me
.prev
= stack_frame_head
; stack_frame_head
= &fra
.me
;
232 fra
.me
.file
= LOCATE_dead_method_removal
;
234 fra
.me
.meth
= LOCATE_dead_method_removal___IRoutine___set_not_reachable
;
235 fra
.me
.has_broke
= 0;
237 fra
.me
.REG
[0] = NIT_NULL
;
238 fra
.me
.REG
[1] = NIT_NULL
;
239 fra
.me
.REG
[2] = NIT_NULL
;
242 /* ./analysis//dead_method_removal.nit:53 */
243 fra
.me
.REG
[0] = NEW_ICodeBuilder_icode_builder___ICodeBuilder___init(fra
.me
.REG
[1], fra
.me
.REG
[0]);
244 /* ./analysis//dead_method_removal.nit:54 */
245 fra
.me
.REG
[1] = CALL_icode_builder___ICodeBuilder___seq(fra
.me
.REG
[0])(fra
.me
.REG
[0]);
246 fra
.me
.REG
[1] = CALL_icode_base___ISeq___icodes(fra
.me
.REG
[1])(fra
.me
.REG
[1]);
247 CALL_abstract_collection___RemovableCollection___clear(fra
.me
.REG
[1])(fra
.me
.REG
[1]);
248 /* ./analysis//dead_method_removal.nit:55 */
250 fra
.me
.REG
[1] = NEW_Array_array___Array___with_capacity(REGB0
);
252 fra
.me
.REG
[2] = BOX_NativeString("This method should not be called !");
254 fra
.me
.REG
[2] = NEW_String_string___String___with_native(fra
.me
.REG
[2], REGB0
);
255 once_value_1
= fra
.me
.REG
[2];
256 register_static_object(&once_value_1
);
257 } else fra
.me
.REG
[2] = once_value_1
;
258 fra
.me
.REG
[2] = fra
.me
.REG
[2];
259 CALL_abstract_collection___SimpleCollection___add(fra
.me
.REG
[1])(fra
.me
.REG
[1], fra
.me
.REG
[2]);
260 CALL_icode_builder___ICodeBuilder___add_abort(fra
.me
.REG
[0])(fra
.me
.REG
[0], fra
.me
.REG
[1]);
261 stack_frame_head
= fra
.me
.prev
;