This series of 5 patches generate LDRD/STRD instead of POP/PUSH in epilogue/prologue for ARM and Thumb-2 mode of A15.
Patch [1/5] introduces new field in tune which can be used to indicate whether LDRD/STRD are preferred over POP/PUSH by the specific core. Patches [2-5/5] use this field to determine if LDRD/STRD can be generated instead of PUSH/POP in ARM and Thumb-2 mode. Patch [2/5] generates LDRD instead of POP for Thumb-2 epilogue in A15. This patch depends on patch [1/5]. Patch [3/5] generates STRD instead of PUSH for Thumb-2 prologue in A15. This patch depends for variables, functions and patterns defined in [1/5] and [2/5]. Patch [4/5] generates STRD instead of PUSH for ARM prologue in A15. This patch depends on [1/5]. Patch [5/5] generates LDRD instead of POP for ARM epilogue in A15. This patch depends for variables, functions and patterns defined in [1/5] and [4/5]. All these patches depend upon the Thumb2/ARM RTL epilogue patches http://gcc.gnu.org/ml/gcc-patches/2011-09/msg01854.html, http://gcc.gnu.org/ml/gcc-patches/2011-09/msg01855.html submitted for review. All these patches are applied in given order and tested with check-gcc, check-gdb and bootstrap without regression. In case of ARM mode, significant performance improvement can be seen on some parts of a popular embedded consumer benchmark (~26%). However, in most of the cases, not much effect is seen on performance. (~ 3% improvement) In case of thumb2, the performance improvement observed on same parts the benchmark is ~11% (2.5% improvement). --