swift
d74299e6 - [move-function] Add a new instruction called mark_unresolved_move_addr.

Commit
3 years ago
[move-function] Add a new instruction called mark_unresolved_move_addr. This instruction is similar to a copy_addr except that it marks a move of an address that has to be checked. In order to keep the memory lifetime verifier happy, the semantics before the checker runs are the mark_unresolved_move_addr is equivalent to copy_addr [init] (not copy_addr [take][init]). The use of this instruction is that Mandatory Inlining converts builtin "move" to a mark_unresolved_move_addr when inlining the function "_move" (the only place said builtin is invoked). This is then run through a special checker (that is later in this PR) that either proves that the mark_unresolved_move_addr can actually be a move in which case it converts it to copy_addr [take][init] or if it can not be a move, emit an error and convert the instruction to a copy_addr [init]. After this is done for all instructions, we loop back through again and emit an error on any mark_unresolved_move_addr that were not processed earlier allowing for us to know that we have completeness. NOTE: The move kills checker for addresses is going to run after Mandatory Inlining, but before predictable memory opts and friends.
Author
Committer
Parents
Loading