1. A method for handling Simple Instruction Multiple Data (SIMD) architecture restrictions through data reshaping, padding, and alignment, the method comprising: building a global call graph having a plurality of nodes for a plurality of procedures; traversing each of the plurality of nodes in the global call graph in an intermediate representation in reverse depth-first order, wherein in response to the intermediate representation not being available for a procedure from the plurality of procedures, identifying the procedure as undefined, and in response to the intermediate representation being available defining the procedure as defined; for each procedure of the plurality of procedures being defined, collecting and recording pointer information; creating array descriptors for maintaining array attributes; gathering array affinity information; performing global pointer analysis and escape analysis; performing loop-based analysis to identify a SIMD opportunity; building an array affinity graph; performing graph partitioning on the array affinity graph to construct an array reshaping plan; performing data reshaping on the array affinity graph; and performing SIMDization on the array affinity graph wherein SIMDization comprises automatic generation of SIMD code, wherein the array descriptors are accessed by an array descriptor index, wherein an affinity matrix is referenced by the array descriptor index, wherein for every array in the array affinity graph, whether the array is a dynamic array or a static array, an array descriptor index that is accessed through its array descriptor index, maintains array attributes including, lower bound, upper bound, dimension, stride.