Hi Vladimir, Would you be willing to have a look at the LRA part? This basically only involves patch number 1, i.e., https://gcc.gnu.org/pipermail/gcc-patches/2024-October/666455.html Would be great to get some feedback whether the current approach is feasible or whether I should drop this patch. Of course, if anyone else wants to join in I would be happy, too ;-)
Cheers, Stefan On Fri, Nov 29, 2024 at 10:15:45AM +0100, Stefan Schulze Frielinghaus wrote: > Ping. > > On Fri, Oct 25, 2024 at 11:57:16AM +0200, Stefan Schulze Frielinghaus wrote: > > This is a follow-up to > > https://gcc.gnu.org/pipermail/gcc-patches/2024-September/663238.html > > > > The primary changes are about error handling and documentation updates. > > Now, we error out whenever a hard register constraint is used more than > > once across an alternative for outputs or inputs. For example, the > > following is allowed for register asm > > > > register int y __asm__ ("0") = x; > > __asm__ ("" : "=r" (y) : "0" (y), "r" (y)); > > > > and the analogue for hard register constraints > > > > int y = x; > > __asm__ ("" : "={0}" (y) : "0" (y), "{0}" (y)); // invalid > > > > is rejected. > > > > Furthermore, for hard register constraints we fail if an output object > > is used more than once as e.g. > > > > int x; > > asm ("" : "=r" (x), "={1}" (x)); // rejected > > > > although > > > > int x; > > asm ("" : "=r" (x), "=r" (x)); > > > > is accepted. > > > > Thus, in total the changes make hard register constraints more strict in > > order to prevent subtle bugs. > > > > 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/config/cris/cris.cc | 6 +- > > gcc/config/i386/i386.cc | 6 + > > gcc/config/s390/s390.cc | 6 +- > > gcc/doc/extend.texi | 178 +++++++++++ > > gcc/doc/md.texi | 6 + > > gcc/function.cc | 116 ++++++++ > > gcc/genoutput.cc | 60 ++++ > > gcc/genpreds.cc | 4 +- > > gcc/gimplify.cc | 236 ++++++++++++++- > > gcc/gimplify_reg_info.h | 169 +++++++++++ > > gcc/ira.cc | 79 ++++- > > gcc/lra-constraints.cc | 13 + > > gcc/output.h | 2 + > > gcc/recog.cc | 11 +- > > gcc/stmt.cc | 278 +++++++++++++++++- > > 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.dg/asm-hard-reg-demotion-error-1.c | 29 ++ > > 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 | 26 ++ > > gcc/testsuite/gcc.dg/asm-hard-reg-error-3.c | 27 ++ > > gcc/testsuite/gcc.dg/asm-hard-reg-error-4.c | 24 ++ > > gcc/testsuite/gcc.dg/asm-hard-reg-error-5.c | 13 + > > gcc/testsuite/gcc.dg/pr87600-2.c | 30 +- > > gcc/testsuite/gcc.dg/pr87600-3.c | 35 +++ > > .../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-longdouble.h | 18 ++ > > gcc/testsuite/lib/scanasm.exp | 4 + > > gcc/toplev.cc | 4 + > > 45 files changed, 2087 insertions(+), 100 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-error-1.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/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/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-longdouble.h > > > > -- > > 2.45.2 > >