On Sat, Dec 07, 2024 at 08:49:20AM +0100, Georg-Johann Lay wrote:
> Is there a PR for this feature?  (Just to make sure that I don't
> miss progress on this I could CC to the PR).

No.  However, I can CC you in case of further patch revisions.

Cheers,
Stefan

> 
> Johann
> 
> Am 10.09.24 um 16:20 schrieb Stefan Schulze Frielinghaus:
> > This series introduces hard register constraints.  The first patch
> > enables hard register constraints for asm statements and for
> > machine descriptions.  The subsequent patch adds some basic error
> > handling for asm statements.  The third patch adds some verification of
> > register names used in machine description.  The fourth and last patch
> > adds the feature of rewriting local register asm into hard register
> > constraints.
> > 
> > This series was bootstrapped and regtested on s390.  Furthermore, the
> > new dg-compile tests were verified via cross compilers for the enabled
> > targets.  There is still some fallout if -fdemote-register-asm is used
> > since a couple of features are missing as e.g. erroring out during
> > gimplification if the clobber set of registers intersects with
> > input/output registers.
> > 
> > As a larger test vehicle I've compiled and regtested glibc on s390 using
> > -fdemote-register-asm without any fallout.  On x86_64 this fails due to
> > the limitation that fixed registers are currently not supported for hard
> > register constraints (see commit message of the first patch).  This is
> > also the reason why I'm posting this series already since I was hoping
> > to get some feedback about this limitation.
> > 
> > Furthermore, I've compiled the Linux kernel on s390 and x86_64 with
> > -fdemote-register-asm.  Interestingly, the Linux kernel for x86_64 makes
> > use of the following asm statement:
> > 
> > #define call_on_stack(stack, func, asm_call, argconstr...)              \
> > {                                                                       \
> >          register void *tos asm("r11");                                  \
> >                                                                          \
> >          tos = ((void *)(stack));                                        \
> >                                                                          \
> >          asm_inline volatile(                                            \
> >          "movq   %%rsp, (%[tos])                         \n"             \
> >          "movq   %[tos], %%rsp                           \n"             \
> >                                                                          \
> >          asm_call                                                        \
> >                                                                          \
> >          "popq   %%rsp                                   \n"             \
> >                                                                          \
> >          : "+r" (tos), ASM_CALL_CONSTRAINT                               \
> >          : [__func] "i" (func), [tos] "r" (tos) argconstr                \
> >          : "cc", "rax", "rcx", "rdx", "rsi", "rdi", "r8", "r9", "r10",   \
> >            "memory"                                                      \
> >          );                                                              \
> > }
> > 
> > Note the output
> >    "+r" (tos)
> > and the input
> >    [tos] "r" (tos)
> > Currently I error out for this since I consider this as two inputs using
> > the same hard register.  One time an implicit input via '+' and a second
> > time via the explicit input.  Thus, actually I would expect a '='
> > instead of a '+' for the output constraint since the input is explicitly
> > mentioned, or remove the input entirely and just use the inoutput
> >     [tos] "+r" (tos)
> > If you consider this valid asm I would have to adjust the error
> > handling.  Either way, this is just about error handling and doesn't
> > really affect code generation.
> > 
> > Stefan Schulze Frielinghaus (4):
> >    Hard register constraints
> >    Error handling for hard register constraints
> >    genoutput: Verify hard register constraints
> >    Rewrite register asm into hard register constraints
> > 
> >   gcc/cfgexpand.cc                              |  42 ---
> >   gcc/common.opt                                |   4 +
> >   gcc/function.cc                               | 116 ++++++++
> >   gcc/genoutput.cc                              |  60 ++++
> >   gcc/genpreds.cc                               |   4 +-
> >   gcc/gimplify.cc                               | 151 +++++++++-
> >   gcc/gimplify_reg_info.h                       | 130 +++++++++
> >   gcc/ira.cc                                    |  79 +++++-
> >   gcc/lra-constraints.cc                        |  13 +
> >   gcc/output.h                                  |   2 +
> >   gcc/recog.cc                                  |  11 +-
> >   gcc/stmt.cc                                   | 268 +++++++++++++++++-
> >   gcc/stmt.h                                    |   9 +-
> >   gcc/testsuite/gcc.dg/asm-hard-reg-1.c         |  85 ++++++
> >   gcc/testsuite/gcc.dg/asm-hard-reg-2.c         |  33 +++
> >   gcc/testsuite/gcc.dg/asm-hard-reg-3.c         |  25 ++
> >   gcc/testsuite/gcc.dg/asm-hard-reg-4.c         |  50 ++++
> >   gcc/testsuite/gcc.dg/asm-hard-reg-5.c         |  36 +++
> >   gcc/testsuite/gcc.dg/asm-hard-reg-6.c         |  60 ++++
> >   gcc/testsuite/gcc.dg/asm-hard-reg-7.c         |  41 +++
> >   gcc/testsuite/gcc.dg/asm-hard-reg-8.c         |  49 ++++
> >   .../gcc.dg/asm-hard-reg-demotion-1.c          |  19 ++
> >   .../gcc.dg/asm-hard-reg-demotion-2.c          |  19 ++
> >   gcc/testsuite/gcc.dg/asm-hard-reg-demotion.h  |  52 ++++
> >   gcc/testsuite/gcc.dg/asm-hard-reg-error-1.c   |  83 ++++++
> >   gcc/testsuite/gcc.dg/asm-hard-reg-error-2.c   |  20 ++
> >   gcc/testsuite/gcc.dg/asm-hard-reg-error-3.c   |  21 ++
> >   gcc/testsuite/gcc.dg/pr87600-2.c              |  30 +-
> >   gcc/testsuite/gcc.dg/pr87600-3.c              |  35 +++
> >   gcc/testsuite/gcc.dg/pr87600-3.s              |   0
> >   .../gcc.target/s390/asm-hard-reg-1.c          | 103 +++++++
> >   .../gcc.target/s390/asm-hard-reg-2.c          |  43 +++
> >   .../gcc.target/s390/asm-hard-reg-3.c          |  42 +++
> >   gcc/testsuite/lib/scanasm.exp                 |   4 +
> >   gcc/toplev.cc                                 |   4 +
> >   35 files changed, 1656 insertions(+), 87 deletions(-)
> >   create mode 100644 gcc/gimplify_reg_info.h
> >   create mode 100644 gcc/testsuite/gcc.dg/asm-hard-reg-1.c
> >   create mode 100644 gcc/testsuite/gcc.dg/asm-hard-reg-2.c
> >   create mode 100644 gcc/testsuite/gcc.dg/asm-hard-reg-3.c
> >   create mode 100644 gcc/testsuite/gcc.dg/asm-hard-reg-4.c
> >   create mode 100644 gcc/testsuite/gcc.dg/asm-hard-reg-5.c
> >   create mode 100644 gcc/testsuite/gcc.dg/asm-hard-reg-6.c
> >   create mode 100644 gcc/testsuite/gcc.dg/asm-hard-reg-7.c
> >   create mode 100644 gcc/testsuite/gcc.dg/asm-hard-reg-8.c
> >   create mode 100644 gcc/testsuite/gcc.dg/asm-hard-reg-demotion-1.c
> >   create mode 100644 gcc/testsuite/gcc.dg/asm-hard-reg-demotion-2.c
> >   create mode 100644 gcc/testsuite/gcc.dg/asm-hard-reg-demotion.h
> >   create mode 100644 gcc/testsuite/gcc.dg/asm-hard-reg-error-1.c
> >   create mode 100644 gcc/testsuite/gcc.dg/asm-hard-reg-error-2.c
> >   create mode 100644 gcc/testsuite/gcc.dg/asm-hard-reg-error-3.c
> >   create mode 100644 gcc/testsuite/gcc.dg/pr87600-3.c
> >   create mode 100644 gcc/testsuite/gcc.dg/pr87600-3.s
> >   create mode 100644 gcc/testsuite/gcc.target/s390/asm-hard-reg-1.c
> >   create mode 100644 gcc/testsuite/gcc.target/s390/asm-hard-reg-2.c
> >   create mode 100644 gcc/testsuite/gcc.target/s390/asm-hard-reg-3.c
> > 

Reply via email to