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 >