This PR implemented Loop Invariant boundary detection and loop invariant hoisting for Tree Unique Args.
An loop invariant is considered boundary iff it's invariant but one or more of it's parent is not invariant.
An invariant can be moved out the loop iff it's boundary invariant and it's Expr-size > 1, which mean it's not simple (Get (Arg id) n).
This PR implemented Loop Invariant boundary detection and loop invariant hoisting for Tree Unique Args. An loop invariant is considered boundary iff it's invariant but one or more of it's parent is not invariant. An invariant can be moved out the loop iff it's boundary invariant and it's
Expr-size
> 1, which mean it's not simple(Get (Arg id) n)
.