Lines Matching defs:loop

44    /* True if some loop-active invocations might take a different control-flow path.
46 * divergent because those invocations are no longer active in the loop.
48 * the other side is still loop-active. */
50 /* True if a divergent continue happened since the loop header */
52 /* True if a divergent break happened since the loop header */
871 * (2) mu: which only exist at loop headers,
872 * merge initial and loop-carried values.
874 * is divergent or a divergent loop continue condition
889 /* if this loop is uniform, we're done here */
892 /* skip the loop preheader */
899 /* check if all loop-carried values are from the same ssa-def */
912 * (3) eta: represent values that leave a loop.
914 * or any loop exit condition is divergent for a value which is
915 * not loop-invariant.
916 * (note: there should be no phi for loop-invariant variables.) */
963 /* join loop divergence information from both branch legs */
969 /* A divergent continue makes succeeding loop CF divergent:
970 * not all loop-active invocations participate in the remaining loop-body
978 visit_loop(nir_loop *loop, struct divergence_state *state)
981 nir_block *loop_header = nir_loop_first_block(loop);
984 /* handle loop header phis first: we have no knowledge yet about
985 * the loop's control flow or any loop-carried sources. */
1003 /* setup loop state */
1009 /* process loop body until no further changes are made */
1012 progress |= visit_cf_list(&loop->body, &loop_state);
1015 /* revisit loop header phis to see if something has changed */
1029 /* handle phis after the loop */
1030 nir_foreach_instr(instr, nir_cf_node_cf_tree_next(&loop->cf_node)) {
1040 loop->divergent = (loop_state.divergent_loop_break || loop_state.divergent_loop_continue);