This paper presents a novel method to construct a dynamic single assignment (DSA) form of array-intensive, pointer-free C programs (or in any other procedural language). A program in DSA form does not perform any destructive update of scalars and array elements, i.e., each element is written at most once. As DSA makes the dependencies between variable references explicit, it facilitates complex analyses and optimizations of programs. This makes it a preferred intermediate form for a number of compiler techniques of growing importance: parallelization, systolic array design, programming heterogeneous architectures, memory optimization, and verification of source code transformations. Existing transformations into DSA perform a complex data flow analysis that is exponential in the program size and that only accepts input programs where all loop bounds, array indexation and conditionals are (possibly piecewise) affine expressions in the loop iterators. Our method removes irregularities ...