You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This allows hoisting out of scf.forall ops which are distributed loops. Whether this operation ends up as a loop depends on the processor ID mapping attached to the op which is resolved later in compilation, so hoisting is not possible until then. Additionally, hoisting out of distributed loops complicates determining memory spaces for bufferization because it becomes harder to determine where a write conflict is occurring.
Hoisting any operation out of a zero-trip count loop causes the hoisted operation to potentially do work that wasn't needed. Hoisting needs to either have a guarantee that the loop has at least one trip or wrap the loop in a scf.if (loop_will_happen) { hoisted_code; loop }.
The text was updated successfully, but these errors were encountered:
Currently the upstream pass for loop invariant code motion performs hoisting on all loops independent of loop type or loop bounds. This has two issues:
scf.forall
ops which are distributed loops. Whether this operation ends up as a loop depends on the processor ID mapping attached to the op which is resolved later in compilation, so hoisting is not possible until then. Additionally, hoisting out of distributed loops complicates determining memory spaces for bufferization because it becomes harder to determine where a write conflict is occurring.scf.if (loop_will_happen) { hoisted_code; loop }
.The text was updated successfully, but these errors were encountered: