This work extends lattice-based memory allocation, an earlier work on memory (array)reuse analysis. The main motivation is to handle in a better way the more general forms ofspecifications we see today, e.g., with loop tiling, pipelining, and other forms of parallelism availablein explicitly parallel languages. Our extension has two complementary aspects. We show howto handle more general specifications where conflicting constraints (those that describe the arrayindices that cannot share the same location) are specified as a (non-convex) union of polyhedra.Unlike convex specifications, this also requires to be able to choose suitable directions (or basis) ofarray reuse. For that, we extend two dual approaches, previously proposed for a fixe...