Currently, there are three major issues in AArch64 variable argument
(vaarg) support.

  * tree-stdarg pass is not enabled, thus we are doing uncessary
    register pushes/popes.  This is PR63596.

  * va_arg gimplification hook is generating sub-optimal code due to the
    runtime boundary check code always consider composite types while we
    can make the check code lighter if there is no composite type.

  * Even when there is composite type, we can simplify the cfg generated
    during va_arg gimplification to avoid creating unnecessary basic
    block.

This patch set fixes above issues.

AArch64 boostrap OK, no regression, new testcases passed.

---
Jiong Wang (4)
  Enable tree-stdarg pass for AArch64 by defining counter fields
  R63596, honor tree-stdarg analysis result to improve VAARG codegen
  Don't generate redundant checks when there is no composite arg
  Simplify cfg during vaarg gimplification

 gcc/config/aarch64/aarch64.c                | 165 ++++++++++++------------
 gcc/testsuite/gcc.dg/tree-ssa/stdarg-2.c    |  15 +++++++++++++++
 gcc/testsuite/gcc.dg/tree-ssa/stdarg-3.c    |  11 +++++++++++
 gcc/testsuite/gcc.dg/tree-ssa/stdarg-4.c    |   4 ++++
 gcc/testsuite/gcc.dg/tree-ssa/stdarg-5.c    |   7 +++++++
 gcc/testsuite/gcc.dg/tree-ssa/stdarg-6.c    |   1 +
 gcc/testsuite/gcc.target/aarch64/va_arg_1.c |  11 +++++++++++
 gcc/testsuite/gcc.target/aarch64/va_arg_2.c |  18 ++++++++++++++++++
gcc/testsuite/gcc.target/aarch64/va_arg_3.c | 26 ++++++++++++++++++++++++++
 gcc/testsuite/gcc.target/aarch64/va_arg_4.c |  23 +++++++++++++++++++++++
 gcc/testsuite/gcc.target/aarch64/va_arg_5.c |  20 ++++++++++++++++++++
 11 files changed, 255 insertions(+), 46 deletions(-)

Reply via email to