  Modern optimizing compilers are able to exploit memory access or computation
patterns to generate vectorization codes. However, such patterns in irregular
applications are unknown until runtime due to the input dependence. Thus,
either compiler's static optimization or profile-guided optimization based on
specific inputs cannot predict the patterns for any common input, which leads
to suboptimal code generation. To address this challenge, we develop
Intelligent-Unroll, a framework to automatically optimize irregular
applications with vectorization. Intelligent-Unroll allows the users to depict
the computation task using \textit{code seed} with the memory access and
computation patterns represented in \textit{feature table} and
\textit{information-code tree}, and generates highly efficient codes.
Furthermore, Intelligent-Unroll employs several novel optimization techniques
to optimize reduction operations and gather/scatter instructions. We evaluate
Intelligent-Unroll with sparse matrix-vector multiplication (SpMV) and graph
applications. Experimental results show that Intelligent-Unroll is able to
generate more efficient vectorization codes compared to the state-of-the-art
implementations.
