Region-based memory management for expressive GPU programming