simple set optimisation
the price of having simple code (generation) is that it is sometimes stupid code that gets generated Filter some of the really daft stuff out
This commit is contained in:
19
lib/virtual/passes/set_optimisation.rb
Normal file
19
lib/virtual/passes/set_optimisation.rb
Normal file
@ -0,0 +1,19 @@
|
||||
module Virtual
|
||||
|
||||
class SetOptimisation
|
||||
def run block
|
||||
block.codes.dup.each_with_index do |code , i|
|
||||
next unless code.is_a? Virtual::Set
|
||||
next_code = block.codes[i+1]
|
||||
next unless next_code.is_a? Virtual::Set
|
||||
next unless code.to == next_code.from
|
||||
# TODO: a correct implementation would have to check that the code.to
|
||||
# is not used in further blocks, before being assigned to
|
||||
new_code = Virtual::Set.new(code.from , next_code.to )
|
||||
block.replace(code , [new_code] )
|
||||
block.replace(next_code , [] )
|
||||
end
|
||||
end
|
||||
end
|
||||
Virtual.machine.add_pass "Virtual::SetOptimisation"
|
||||
end
|
Reference in New Issue
Block a user