Class: MilkTea::ControlFlow::Liveness

Inherits:
Object
  • Object
show all
Defined in:
lib/milk_tea/core/control_flow/liveness.rb

Defined Under Namespace

Classes: Result

Class Method Summary collapse

Class Method Details

.solve(graph) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/milk_tea/core/control_flow/liveness.rb', line 8

def self.solve(graph)
  result = Dataflow.solve(
    graph,
    direction: :backward,
    initial: -> { Set.new },
    join: lambda do |states|
      states.reduce(Set.new) { |acc, state| acc | state }
    end,
    transfer: lambda do |node, live_out|
      node.reads | (live_out - node.writes)
    end,
  )
  Result.new(live_in: result.in_states, live_out: result.out_states)
end