It is clear that automatic compiler support for energy optimization can lead to better embedded system implementations with
reduced design time and cost. Efficient solutions to energy optimization problems are particularly important for array-dominated
applications that spend a significant portion of their energy budget in executing memory-related operations. Recent interest
in multi-bank memory architectures and low-power operating modes motivates us to investigate whether current locality-oriented
loop-level transformations are suitable from an energy perspective in a multi-bank architecture, and if not, how these transformations
can be tuned to take into account the banked nature of the memory structure and the existence of low-power modes. In this
paper, we discuss the similarities and conflicts between two complementary objectives, namely, optimizing cache locality and
reducing memory system energy, and try to see whether loop transformations developed for the former objective can also be
used for the latter. To test our approach, we have implemented bank-conscious versions of three loop transformation techniques
(loop fission/fusion, linear loop transformations, and loop tiling) using an experimental compiler infrastructure, and measured
the energy benefits using nine array-dominated codes. Our results show that the modified (memory bank-aware) loop transformations
result in large energy savings in both cacheless and cache-based systems, and that the execution times of the resulting codes
are competitive with those obtained using pure locality-oriented techniques in a cache-based system.