On Wed, Jul 09, 2025 at 03:48:43PM +0200, Stefan Schulze Frielinghaus wrote:
> This is a follow-up to
> https://gcc.gnu.org/pipermail/gcc-patches/2025-May/684181.html
> 
> I added the last missing pieces namely changelogs, and bootstrapped and
> regtested on
> 
> aarch64-unknown-linux-gnu
> powerpc64le-unknown-linux-gnu
> s390x-ibm-linux-gnu
> x86_64-pc-linux-gnu
> 
> Via cross compilers I verified the new tests for
> 
> arm-linux-gnueabi
> i686-linux-gnueabi
> powerpc-linux-gnu
> riscv32-linux-gnu
> riscv64-linux-gnu
> 
> Despite that I removed overloads for parse_{input,output}_constraint()
> by passing a null pointer explicitly.  Furthermore, in case of register
> pairs, if two constraints of operands overlap, error out and report the
> overlapped register.  For example, on aarch64
> 
> svuint32x2_t x, y;
> asm ("" : "={z5}" (x), "={z6}" (y));
> 
> previously I used the register as is of the first constraint in the
> error message which is imprecise/misleading.  Now, I error out reporting
> multiple outputs to register z6/v6, i.e., the actual overlapped one, and
> not z5/v5 as previously.
> 
> Although I found a lot of corner cases during development via
> -fdemote-register-asm I removed it from this patch series.  I
> compiled and used the Linux kernel and glibc successfully with it for
> s390x.  For x86_64, the Linux kernel compiles fine, too, except of one
> small manual change.  For powerpc64le, I ran into an odd case compiling
> glibc which I would like to understand in more detail.  Since register
> asm is not as strict as hard register constraints, for a full fledged
> implementation I need to consider more corner cases.  Therefore, I would
> like to spend some more time on this before I push this new feature.
> 
> In total no huge changes.  Still ok for mainline?

Although the v4 patches have been acked I'm not sure whether this falls
under the "is obvious" rule since I changed a little bit.  If I get your
final Ok I will push these patches and will not bother you further ;-)
I already have an idea for the fourth patch (-fdemote-register-asm)
which I exclude for the moment and will come back to in the future.

Cheers,
Stefan

> 
> Stefan Schulze Frielinghaus (3):
>   Hard register constraints
>   Error handling for hard register constraints
>   genoutput: Verify hard register constraints
> 
>  gcc/ada/gcc-interface/trans.cc                |   9 +-
>  gcc/analyzer/region-model-asm.cc              |   7 +-
>  gcc/c/c-typeck.cc                             |   6 +-
>  gcc/cfgexpand.cc                              |  53 +---
>  gcc/config/cris/cris.cc                       |   6 +-
>  gcc/config/i386/i386.cc                       |   6 +
>  gcc/config/s390/s390.cc                       |  11 +-
>  gcc/cp/semantics.cc                           |   6 +-
>  gcc/d/toir.cc                                 |   6 +-
>  gcc/doc/extend.texi                           | 162 ++++++++++
>  gcc/doc/md.texi                               |   6 +
>  gcc/function.cc                               | 116 ++++++++
>  gcc/genoutput.cc                              |  60 ++++
>  gcc/genpreds.cc                               |   4 +-
>  gcc/gimple-walk.cc                            |  11 +-
>  gcc/gimplify-me.cc                            |   5 +-
>  gcc/gimplify.cc                               | 142 ++++++++-
>  gcc/gimplify_reg_info.h                       | 182 ++++++++++++
>  gcc/ira.cc                                    |  84 +++++-
>  gcc/lra-constraints.cc                        |  13 +
>  gcc/output.h                                  |   2 +
>  gcc/recog.cc                                  |  11 +-
>  gcc/stmt.cc                                   | 277 +++++++++++++++++-
>  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/testsuite/gcc.dg/asm-hard-reg-error-1.c   |  83 ++++++
>  gcc/testsuite/gcc.dg/asm-hard-reg-error-2.c   |  26 ++
>  gcc/testsuite/gcc.dg/asm-hard-reg-error-3.c   |  27 ++
>  gcc/testsuite/gcc.dg/asm-hard-reg-error-4.c   |  21 ++
>  gcc/testsuite/gcc.dg/asm-hard-reg-error-5.c   |  13 +
>  gcc/testsuite/gcc.dg/pr87600-2.c              |  19 --
>  gcc/testsuite/gcc.dg/pr87600-3.c              |  26 ++
>  .../gcc.target/aarch64/asm-hard-reg-1.c       |  55 ++++
>  .../gcc.target/aarch64/asm-hard-reg-2.c       |  17 ++
>  .../gcc.target/i386/asm-hard-reg-1.c          |  80 +++++
>  .../gcc.target/i386/asm-hard-reg-2.c          |  43 +++
>  .../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.target/s390/asm-hard-reg-4.c          |   6 +
>  .../gcc.target/s390/asm-hard-reg-5.c          |   6 +
>  .../gcc.target/s390/asm-hard-reg-6.c          | 152 ++++++++++
>  .../gcc.target/s390/asm-hard-reg-7.c          |  34 +++
>  .../gcc.target/s390/asm-hard-reg-longdouble.h |  18 ++
>  gcc/testsuite/lib/scanasm.exp                 |   4 +
>  gcc/toplev.cc                                 |   4 +
>  gcc/tree-ssa-operands.cc                      |   4 +-
>  gcc/tree-ssa-structalias.cc                   |   4 +-
>  gcc/varasm.cc                                 |   5 +-
>  56 files changed, 2283 insertions(+), 125 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-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/asm-hard-reg-error-4.c
>  create mode 100644 gcc/testsuite/gcc.dg/asm-hard-reg-error-5.c
>  create mode 100644 gcc/testsuite/gcc.dg/pr87600-3.c
>  create mode 100644 gcc/testsuite/gcc.target/aarch64/asm-hard-reg-1.c
>  create mode 100644 gcc/testsuite/gcc.target/aarch64/asm-hard-reg-2.c
>  create mode 100644 gcc/testsuite/gcc.target/i386/asm-hard-reg-1.c
>  create mode 100644 gcc/testsuite/gcc.target/i386/asm-hard-reg-2.c
>  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
>  create mode 100644 gcc/testsuite/gcc.target/s390/asm-hard-reg-4.c
>  create mode 100644 gcc/testsuite/gcc.target/s390/asm-hard-reg-5.c
>  create mode 100644 gcc/testsuite/gcc.target/s390/asm-hard-reg-6.c
>  create mode 100644 gcc/testsuite/gcc.target/s390/asm-hard-reg-7.c
>  create mode 100644 gcc/testsuite/gcc.target/s390/asm-hard-reg-longdouble.h
> 
> -- 
> 2.49.0
> 

Reply via email to