PROGRAML: A Graph-based Program Representation for Data Flow Analysis and Compiler Optimizations