This paper presents a novel method for transforming programs into dynamic single assignment (DSA) form in a way that is quadratic in program size and polynomial in loop nest depth. Existing DSA transformation methods have exponential runtime and are limited to certain programs. The key insights of the new method are: (1) it adds copy operations to simplify array access patterns and enable exact data flow analysis with simple algorithms, and (2) it renames variables and introduces selection conditions to ensure each statement writes to a unique variable element. Experiments show the method scales well and enables optimizations and verification of large programs.