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:
Torsten Ruger
2015-06-21 17:25:27 +03:00
parent aafb179c61
commit f3ee11fca5
2 changed files with 20 additions and 1 deletions

View 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