class Crokus::CFGOptimizer

Public Instance Methods

clean(cfg) click to toggle source
# File lib/crokus/cfg_optim.rb, line 5
def clean cfg
  puts " "*5+"|--[+] optimizing cfg '#{cfg.name}'" unless $options[:mute]
  @cfg=cfg
  @visited=[]
  @new_succs={}
  optim_rec cfg.starter
  cfg
end

Private Instance Methods

optim_rec(bb) click to toggle source
# File lib/crokus/cfg_optim.rb, line 16
def optim_rec bb
  @visited << bb
  @new_succs[bb]=[]
  bb.succs.each_with_index do |succ,idx|
    if bb.succs.size==1 and succ.succs.size==1
      bb.stmts << succ.stmts
      bb.stmts.flatten!
      @cfg.bbs.delete(succ)
      bb.succs[0]=succ.succs.first
    end
    optim_rec succ unless @visited.include?(succ)
  end
end