1 | # -*- coding: utf-8 -*-
|
---|
2 | #
|
---|
3 | # TECS Generator
|
---|
4 | # Generator for TOPPERS Embedded Component System
|
---|
5 | #
|
---|
6 | # Copyright (C) 2008-2014 by TOPPERS Project
|
---|
7 | #--
|
---|
8 | # ä¸è¨èä½æ¨©è
|
---|
9 | ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
|
---|
10 | # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹
|
---|
11 | # å¤ã»åé
|
---|
12 | å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
|
---|
13 | # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
|
---|
14 | # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
|
---|
15 | # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼
|
---|
16 | # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
|
---|
17 | # ç¨ã§ããå½¢ã§åé
|
---|
18 | å¸ããå ´åã«ã¯ï¼åé
|
---|
19 | å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨
|
---|
20 | # è
|
---|
21 | ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
|
---|
22 | # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
|
---|
23 | # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
|
---|
24 | # ç¨ã§ããªãå½¢ã§åé
|
---|
25 | å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
|
---|
26 | # ã¨ï¼
|
---|
27 | # (a) åé
|
---|
28 | å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è
|
---|
29 | ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
|
---|
30 | # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
|
---|
31 | # (b) åé
|
---|
32 | å¸ã®å½¢æ
|
---|
33 | ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã«
|
---|
34 | # å ±åãããã¨ï¼
|
---|
35 | # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
|
---|
36 | # 害ãããï¼ä¸è¨èä½æ¨©è
|
---|
37 | ããã³TOPPERSããã¸ã§ã¯ããå
|
---|
38 | 責ãããã¨ï¼
|
---|
39 | # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
|
---|
40 | # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
|
---|
41 | ããã³TOPPERSããã¸ã§ã¯ãã
|
---|
42 | # å
|
---|
43 | 責ãããã¨ï¼
|
---|
44 | #
|
---|
45 | # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
|
---|
46 | ã
|
---|
47 | # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
|
---|
48 | # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
|
---|
49 | # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã
|
---|
50 | # ã®è²¬ä»»ãè² ããªãï¼
|
---|
51 | #
|
---|
52 | # $Id: optimize.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
|
---|
53 | #++
|
---|
54 |
|
---|
55 | =begin
|
---|
56 | This file includes the processes between semantics analysis and code generation.
|
---|
57 | Optimize is one of them.
|
---|
58 | Other processes are setting ID for each cell and setting domain information
|
---|
59 |
|
---|
60 | ãã®ãã¡ã¤ã«ã«ã¯ãæå³è§£æããã³ã¼ãçæã®éã§è¡ãã¹ãå¦çãå«ã¾ããï¼
|
---|
61 | æé©åããã®ä¸ã¤ã§ããï¼
|
---|
62 | ãã®ä»ã«ãã»ã«æ¯ã® ID ä»ãããã¡ã¤ã³ãããè¡ãï¼
|
---|
63 | ã³ã¼ãçæ対象ã¨ãªãã»ã«ã対象ã«å¦çãè¡ããã®ãå«ã¾ããï¼
|
---|
64 | =end
|
---|
65 |
|
---|
66 | class Namespace
|
---|
67 |
|
---|
68 | #=== åã»ã«ã« ID ï¼æ´æ°å¤ï¼ãå²ä»ãã
|
---|
69 | def set_cell_id_and_domain
|
---|
70 | # celltype ã®åã»ã«ã« ID ãå²ä»ãã
|
---|
71 | @celltype_list.each { |t|
|
---|
72 | t.set_cell_id_and_domain
|
---|
73 | }
|
---|
74 |
|
---|
75 | # ãµããã¼ã ã¹ãã¼ã¹ã®åã»ã«ã« ID ãå²ä»ãã
|
---|
76 | @namespace_list.each { |n|
|
---|
77 | n.set_cell_id_and_domain
|
---|
78 | }
|
---|
79 | end
|
---|
80 |
|
---|
81 | def optimize
|
---|
82 | # celltype ã®æé©å
|
---|
83 | @celltype_list.each { |t|
|
---|
84 | t.optimize
|
---|
85 | }
|
---|
86 |
|
---|
87 | # ãµããã¼ã ã¹ãã¼ã¹ã®æé©å
|
---|
88 | @namespace_list.each { |n|
|
---|
89 | n.optimize
|
---|
90 | }
|
---|
91 | end
|
---|
92 |
|
---|
93 | def reset_optimize
|
---|
94 | # celltype ã®æé©å
|
---|
95 | @celltype_list.each { |t|
|
---|
96 | t.reset_optimize
|
---|
97 | }
|
---|
98 |
|
---|
99 | # ãµããã¼ã ã¹ãã¼ã¹ã®æé©å
|
---|
100 | @namespace_list.each { |n|
|
---|
101 | n.reset_optimize
|
---|
102 | }
|
---|
103 | end
|
---|
104 | end
|
---|
105 |
|
---|
106 | class Celltype
|
---|
107 |
|
---|
108 | ID_BASE = 1 # reset_optimize ã§ãªã»ãããã
|
---|
109 | @@ID_BASE = ID_BASE
|
---|
110 |
|
---|
111 | def set_cell_id_and_domain
|
---|
112 | set_cell_id
|
---|
113 | set_domain
|
---|
114 | end
|
---|
115 |
|
---|
116 | #=== åã»ã«ã« ID ï¼æ´æ°å¤ï¼ãå²ä»ãã
|
---|
117 | def set_cell_id
|
---|
118 |
|
---|
119 | if $verbose then
|
---|
120 | print( "=== id for the cells of celltype #{get_namespace_path.to_s} ===\n" )
|
---|
121 | end
|
---|
122 |
|
---|
123 | if $unique_id then
|
---|
124 | @id_base = @@ID_BASE # id ãã·ã¹ãã å
|
---|
125 | ¨ä½ã§é£çªã«ãã
|
---|
126 | else
|
---|
127 | @id_base = 1 # base ã常㫠1 ããå§ãã
|
---|
128 | end
|
---|
129 |
|
---|
130 | id_specified_cells = []
|
---|
131 | no_id_specified_cells = []
|
---|
132 |
|
---|
133 | # ãããã¿ã¤ããé¤ããæ°ãæ±ãã
|
---|
134 | @cell_list.each{ |c|
|
---|
135 | if c.is_generate? then
|
---|
136 | # c.set_id( @id_base + @n_cell_gen )
|
---|
137 | id = c.get_specified_id
|
---|
138 | if id then
|
---|
139 | id_specified_cells << c
|
---|
140 | else
|
---|
141 | no_id_specified_cells << c
|
---|
142 | end
|
---|
143 |
|
---|
144 | # p "#{c.get_name} #{@id_base+@n_cell_gen}"
|
---|
145 | @@ID_BASE += 1
|
---|
146 | @n_cell_gen += 1
|
---|
147 | end
|
---|
148 | }
|
---|
149 |
|
---|
150 | @ordered_cell_list = [] # id = 1 ãæ·»æ° 0 ã«æ ¼ç´ããã
|
---|
151 | # ID æå®ããã¦ããã»ã«ã« id çªå·ãä¸ãã
|
---|
152 | id_specified_cells.each{ |c|
|
---|
153 | id = c.get_specified_id
|
---|
154 | if id > 0 then
|
---|
155 | if id >= @n_cell_gen then
|
---|
156 | cdl_error( "S3001 $1: id too large $2 (max=$3)", c.get_name, id, @n_cell_gen )
|
---|
157 | next
|
---|
158 | end
|
---|
159 | else
|
---|
160 | if - id >= @n_cell_gen then
|
---|
161 | cdl_error( "S3002 $1: id too large $2 (max=$3)", c.get_name, id, @n_cell_gen )
|
---|
162 | next
|
---|
163 | end
|
---|
164 | id = @n_cell_gen + id + 1
|
---|
165 | end
|
---|
166 |
|
---|
167 | if @ordered_cell_list[ id - 1 ] then
|
---|
168 | cdl_error( "S3003 $1: id number '$2' conflict with $3", c.get_name, id, @ordered_cell_list[ id - 1 ].get_name )
|
---|
169 | end
|
---|
170 | @ordered_cell_list[ id - 1 ] = c
|
---|
171 | # éãçªå·ã¨ããå ´åã®ãã @id_base ãå ãã
|
---|
172 | c.set_id( @id_base - 1 + id )
|
---|
173 | if $verbose then
|
---|
174 | print( "#{c.get_name}: id=#{c.get_id} specified id=#{c.get_specified_id}\n" )
|
---|
175 | end
|
---|
176 | }
|
---|
177 |
|
---|
178 | # ID æå®ããã¦ããªãã»ã«ã« id çªå·ãä¸ãã
|
---|
179 | i = 0
|
---|
180 | no_id_specified_cells.each{ |c|
|
---|
181 | while( @ordered_cell_list[i] != nil )
|
---|
182 | i += 1
|
---|
183 | end
|
---|
184 | @ordered_cell_list[ i ] = c
|
---|
185 | c.set_id( @id_base + i )
|
---|
186 | if $verbose then
|
---|
187 | print( "#{c.get_name}: id=#{c.get_id}\n" )
|
---|
188 | end
|
---|
189 | }
|
---|
190 | if @n_cell_gen >0 && i >= @n_cell_gen then
|
---|
191 | raise "id over id=#{i} N=#{@n_cell_gen}"
|
---|
192 | end
|
---|
193 | end
|
---|
194 |
|
---|
195 | def set_domain
|
---|
196 | @cell_list.each{ |c|
|
---|
197 | if c.is_generate? then
|
---|
198 | dr = c.get_region.get_domain_root
|
---|
199 | if dr.get_domain_type then
|
---|
200 | dn = dr.get_domain_type.get_name
|
---|
201 | else
|
---|
202 | dn = nil
|
---|
203 | end
|
---|
204 | if @domain_roots[ dn ] then
|
---|
205 | @domain_roots[ dn ] << dr
|
---|
206 | else
|
---|
207 | @domain_roots[ dn ] = [ dr ]
|
---|
208 | end
|
---|
209 | end
|
---|
210 | }
|
---|
211 |
|
---|
212 | @domain_roots.each{ |dn, drs|
|
---|
213 | drs.uniq!
|
---|
214 | if ! $debug then
|
---|
215 | dbgPrint "domains celltype:#{@name} domain=#{dn} "
|
---|
216 | drs.each{ |r|
|
---|
217 | dbgPrint " region=#{r.get_name}"
|
---|
218 | }
|
---|
219 | dbgPrint "\n"
|
---|
220 | end
|
---|
221 | }
|
---|
222 | if @domain_roots.length > 1 then
|
---|
223 | p @domain_roots
|
---|
224 | raise "ambigous DomainType"
|
---|
225 | end
|
---|
226 |
|
---|
227 | @domain_roots.each{ |dn, regions|
|
---|
228 | # domain_type ã¯ä¸ã¤ã®ãã¼ãã«ä¸ã¤ãããªãã®ã§ãä¸ã¤ã®è¦ç´ ãç¡æ¡ä»¶ã§åãåºã
|
---|
229 | if regions.length > 1 then
|
---|
230 | cdl_info( "celltype:#{@name} has cells in multi domain.\n" )
|
---|
231 | if @idx_is_id == false then
|
---|
232 | cdl_info( "celltype:#{@name} forcely set idx_is_id\n" )
|
---|
233 | end
|
---|
234 | @idx_is_id_act = true
|
---|
235 | end
|
---|
236 | }
|
---|
237 | end
|
---|
238 |
|
---|
239 | def optimize
|
---|
240 |
|
---|
241 | # port ã®åç
|
---|
242 | §ããã»ã«ã¿ã¤ãã®æ°ãã»ã«ã®æ°ãæ±ãã
|
---|
243 | if $verbose then
|
---|
244 | print "=== optimizing celltype #{get_namespace_path.to_s} ===\n"
|
---|
245 | end
|
---|
246 |
|
---|
247 | @port.each{ |port|
|
---|
248 | next if port.get_port_type != :CALL
|
---|
249 | if port.is_omit? then
|
---|
250 | # å¼ã³å£æé©åå®æ½
|
---|
251 | @b_cp_optimized = true
|
---|
252 | @n_call_port_omitted_in_CB += 1 # CB ã§çç¥ããå¼ã³å£
|
---|
253 | port.set_skelton_useless # ã¹ã±ã«ãã³é¢æ°ä¸è¦æé©å
|
---|
254 | port.set_VMT_useless # VMT ä¸è¦æé©å (ç´æ¥åãå£é¢æ°ãå¼åºã)
|
---|
255 | if $verbose then
|
---|
256 | print "optimized by omit: port: #{port.get_name} : o\n"
|
---|
257 | end
|
---|
258 | next
|
---|
259 | end
|
---|
260 |
|
---|
261 | if $verbose then
|
---|
262 | print "optimizing port : #{port.get_name}\n"
|
---|
263 | end
|
---|
264 |
|
---|
265 | port_cells = [] # å¼ã³å
|
---|
266 | ã»ã«
|
---|
267 | port_ports = [] # å¼ã³å
|
---|
268 | ã®ãã¼ã
|
---|
269 |
|
---|
270 | # ã»ã«ã®åç
|
---|
271 | §ããã»ã«ãéããï¼ãã¼ããä¸ç·ã«éããï¼
|
---|
272 | @cell_list.each{ |cell|
|
---|
273 |
|
---|
274 | if ! cell.is_generate? then
|
---|
275 | next
|
---|
276 | end
|
---|
277 |
|
---|
278 | jl = cell.get_join_list
|
---|
279 | j = jl.get_item( port.get_name )
|
---|
280 |
|
---|
281 | if j then
|
---|
282 | if j.get_array_member2 then
|
---|
283 | # å¼ã³å£é
|
---|
284 | åã®å ´åãå
|
---|
285 | ¨é¨ã®çµåå
|
---|
286 | ãéãã
|
---|
287 | j.get_array_member2.each { |j2|
|
---|
288 | if j2 then
|
---|
289 | port_cells << j2.get_rhs_cell
|
---|
290 | port_ports << j2.get_rhs_port # å³è¾ºã®ãã¼ã
|
---|
291 | else
|
---|
292 | # optional ã§ãããæ·»æ°ã®ã¿åæåããã¦ããªãï¼ãã¹ã¦åæåãããªãå ´åã¯ãä¸ï¼
|
---|
293 | port_cells << nil
|
---|
294 | port_ports << nil
|
---|
295 | end
|
---|
296 | }
|
---|
297 | else
|
---|
298 | # å
|
---|
299 | ¨ã¦ã®çµåå
|
---|
300 | ãéãã
|
---|
301 | port_cells << j.get_rhs_cell
|
---|
302 | port_ports << j.get_rhs_port # å³è¾ºã®ãã¼ã
|
---|
303 | end
|
---|
304 | else
|
---|
305 | # optional ã§åæåããã¦ããªãï¼nil ãè¦ç´ ã«å ãã¦ããï¼
|
---|
306 | port_cells << nil
|
---|
307 | port_ports << nil # å³è¾ºã®ãã¼ã
|
---|
308 | end
|
---|
309 | }
|
---|
310 |
|
---|
311 | # éè¤è¦ç´ ãåãé¤ã
|
---|
312 | port_cells.uniq!
|
---|
313 | port_ports.uniq!
|
---|
314 |
|
---|
315 | # å¼ã³å£ã®å¼ã³å
|
---|
316 | ãä¸ã¤ã®ãã¼ãã ããï¼
|
---|
317 | if port_ports.length == 1 then
|
---|
318 |
|
---|
319 | # å¼ã³å£é
|
---|
320 | åãå¯å¤é·ã®å ´åãæé©åããªã
|
---|
321 | # mikan å¼ã³å£é
|
---|
322 | åè¦ç´ æ°ãã¯ãä¸å
|
---|
323 | ·åæ«å®å¯¾ç
|
---|
324 | # ããæã¾ããä¿®æ£ã¯ãåãå£ã¸ã®ãã¤ã³ã¿ã¯çç¥ããããé
|
---|
325 | ååæ°ã¯åºåãã(#_CP_#, #_TCP_#)
|
---|
326 | # ããã«é
|
---|
327 | ååæ°ãå®æ°åã§ããã®ã§ããã°ãå®æ°ãã¯ããåºå (#_NCPA_#)
|
---|
328 | next if port.get_array_size == "[]"
|
---|
329 |
|
---|
330 | # å¼ã³å£æé©åå®æ½
|
---|
331 | @b_cp_optimized = true
|
---|
332 |
|
---|
333 | # å¼ã³å
|
---|
334 | ãä¸ã¤ã®ã»ã«ã ããï¼
|
---|
335 | if port_cells.length == 1 then
|
---|
336 |
|
---|
337 | # å¼ã³å£ã¯ optional ã§åæåããã¦ããªããã¾ãã¯åãå£ã¯é
|
---|
338 | åã§ã¯ãªããï¼
|
---|
339 | if port_ports[0] == nil || port_ports[0].get_array_size == nil then
|
---|
340 |
|
---|
341 | @n_call_port_omitted_in_CB += 1 # CB ã§çç¥ããå¼ã³å£
|
---|
342 | port.set_cell_unique # ã»ã«ä¸ã¤ã ãæé©å
|
---|
343 | port.set_skelton_useless # ã¹ã±ã«ãã³é¢æ°ä¸è¦æé©å
|
---|
344 | port.set_VMT_useless # VMT ä¸è¦æé©å (ç´æ¥åãå£é¢æ°ãå¼åºã)
|
---|
345 |
|
---|
346 | if $verbose then
|
---|
347 | print "cell_unique, VMT_useless & skelton_useless optimize\n"
|
---|
348 | end
|
---|
349 | else
|
---|
350 | port.set_VMT_useless # VMT ä¸è¦æé©å (ã¹ã±ã«ãã³é¢æ°ãå¼åºã)
|
---|
351 |
|
---|
352 | if $verbose then
|
---|
353 | print "VMT_useless optimize\n"
|
---|
354 | end
|
---|
355 | end
|
---|
356 |
|
---|
357 | else # å¼ã³å
|
---|
358 | ãè¤æ°ã®ã»ã«ï¼åä¸ã®ãã¼ãï¼
|
---|
359 |
|
---|
360 | # å¼ã³å£ã¯ optional ã§åæåããã¦ããªããã¾ãã¯åãå£ã¯é
|
---|
361 | åã§ã¯ãªããï¼
|
---|
362 | if port_ports[0] == nil || port_ports[0].get_array_size == nil then
|
---|
363 | if ! @singleton then
|
---|
364 | port.set_skelton_useless # ã¹ã±ã«ãã³é¢æ°ä¸è¦æé©å
|
---|
365 | port.set_VMT_useless # VMT ä¸è¦æé©å (ã¹ã±ã«ãã³é¢æ° or åãå£é¢æ°ãå¼åºã)
|
---|
366 |
|
---|
367 | if $verbose then
|
---|
368 | print "VMT_useless & skelton useless optimize\n"
|
---|
369 | end
|
---|
370 | else
|
---|
371 | port.set_VMT_useless # VMT ä¸è¦æé©å (ã¹ã±ã«ãã³é¢æ° or åãå£é¢æ°ãå¼åºã)
|
---|
372 |
|
---|
373 | if $verbose then
|
---|
374 | print "VMT_useless optimize\n"
|
---|
375 | end
|
---|
376 | end
|
---|
377 | end
|
---|
378 | end
|
---|
379 |
|
---|
380 | port.set_only_callee( port_ports[0], port_cells[0] )
|
---|
381 | # set_cell_unique ã§ãªãå ´å cell ã¯æå³ããªã
|
---|
382 |
|
---|
383 | end
|
---|
384 |
|
---|
385 | # debug
|
---|
386 | dbgPrint "#{port.get_name} : # of cells : #{port_cells.length} # of ports : #{port_ports.length}\n"
|
---|
387 | }
|
---|
388 |
|
---|
389 | # åãå£æé©åã®è¨å®
|
---|
390 | @port.each{ |port|
|
---|
391 | next if port.get_port_type != :CALL
|
---|
392 |
|
---|
393 | # å¼ã³å£å´ã®æé©åç¶æ
|
---|
394 |
|
---|
395 | b_VMT_useless = port.is_VMT_useless?
|
---|
396 | b_skelton_useless = port.is_skelton_useless?
|
---|
397 |
|
---|
398 | # ã»ã«ã®åç
|
---|
399 | §ããã»ã«ãéããï¼ãã¼ããä¸ç·ã«éããï¼
|
---|
400 | @cell_list.each{ |cell|
|
---|
401 |
|
---|
402 | if ! cell.is_generate? then
|
---|
403 | next
|
---|
404 | end
|
---|
405 |
|
---|
406 | jl = cell.get_join_list
|
---|
407 | j = jl.get_item( port.get_name )
|
---|
408 |
|
---|
409 | if j then # optional ã§çµåããã¦ããªãå ´å nil
|
---|
410 | if j.get_array_member2 then
|
---|
411 | # å¼ã³å£é
|
---|
412 | å
|
---|
413 | j.get_array_member2.each { |j2|
|
---|
414 | if j2 then
|
---|
415 | port2 = j2.get_rhs_port # å³è¾ºã®ãã¼ã
|
---|
416 | # åãå£å´ã®æé©åå¯è½æ§ãè¨å®
|
---|
417 | port2.set_entry_VMT_skelton_useless( b_VMT_useless, b_skelton_useless )
|
---|
418 | #else
|
---|
419 | # optional ã§å¼ã³å£é
|
---|
420 | åè¦ç´ ãåæåããã¦ããªã
|
---|
421 | end
|
---|
422 | }
|
---|
423 | else
|
---|
424 | port2 = j.get_rhs_port # å³è¾ºã®ãã¼ã
|
---|
425 | # åãå£å´ã®æé©åå¯è½æ§ãè¨å®
|
---|
426 | port2.set_entry_VMT_skelton_useless( b_VMT_useless, b_skelton_useless )
|
---|
427 | end
|
---|
428 | end
|
---|
429 | }
|
---|
430 | }
|
---|
431 | end
|
---|
432 |
|
---|
433 | #Celltype# ãªã»ãããã
|
---|
434 | def reset_optimize
|
---|
435 | @@ID_BASE = ID_BASE # æ¬å½ã¯ä¸åã ãã§ãã
|
---|
436 | @id_base = 1 # set_cell_id ã§ãªã»ãããããã®ã§ä¸è¦
|
---|
437 |
|
---|
438 | @b_cp_optimized = false # å¼ã³å£æé©å
|
---|
439 | @n_call_port_omitted_in_CB = 0 # å¼ã³å£æé©åã«ããä¸çæã¨ãªã£ããã¼ãã®æ°
|
---|
440 | @n_cell_gen = 0 # çæã»ã«åæ°
|
---|
441 | @port.each{ |p|
|
---|
442 | p.reset_optimize
|
---|
443 | }
|
---|
444 | @included_header = {}
|
---|
445 | @domain_roots = {}
|
---|
446 | end
|
---|
447 |
|
---|
448 | #Celltype# ããã㯠include ããã¦ããã
|
---|
449 | #hname::Symbol : ãããå
|
---|
450 | #RETURN:: bool_t: false ã¤ã³ã¯ã«ã¼ãããã¦ããªããtrue ã¤ã³ã¯ã«ã¼ãããã¦ãã
|
---|
451 | # #_ISH_#, #_ICT_# ã§ããããåãè¾¼ã¾ãã¦ããããã§ãã¯ãã
|
---|
452 | # false ãè¿ã£ãå ´åãhname ã¯ç»é²ããã¦ã次åã®å¼ã³åºãã§ã¯ true ãè¿ã
|
---|
453 | def header_included?( hname )
|
---|
454 | if @included_header[ hname ] == nil then
|
---|
455 | @included_header[ hname ] = true
|
---|
456 | return false
|
---|
457 | else
|
---|
458 | return true
|
---|
459 | end
|
---|
460 | end
|
---|
461 | end
|
---|
462 |
|
---|
463 |
|
---|