(defprotocol IInstruction
(reads-from [this] "Returns a list of instructions this instruction reads from")
(writes-to [this] "Returns a list of instructions this instruction writes to")
(block-references [this] "Returns all the blocks this instruction references"))