[270] | 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 |
|
---|