This change uses superwords object and entry criteria and the swpointer’s code to walk pointers to exclude expressions and evaluate possible vector mappings. The design finds the highest common vector supported and implemented on a given machine and applies that to unrolling, iff it is greater than the default. If the user gates us we will still obey the user directive. It’s light weight, when we get to the analysis part, if we fail, we stop further tries. If we succeed we stop further tries. We generally always analyze only once. We then gate the unroll factor by extending the size of the unroll segment so that the iterative tries will keep unrolling, obtaining larger unrolls of a targeted loop. We do process more loops that superword’s packing and filter process vets. But the alternative, post unrolling after superword and formatting the loops for bigger vectors would take more cycles and be problematic. I see no negative behavior wrt to performance, and a modest positive swing in default behavior up to 1.5x for some micros. The big difference between it and user directives on unrolling is that the directives will force more unrolling than this will, this pass will be more conservative but will still find more opportunities above default behavior.