Automatically Generating Coarse Grained Software Pipelining from Declaratively Specified Communication