On Sat, Jun 21, 2025 at 09:18:43AM -0600, Jeff Law wrote:
> 
> 
> On 5/20/25 1:22 AM, Stefan Schulze Frielinghaus wrote:
> > This implements error handling for hard register constraints including
> > potential conflicts with register asm operands.
> > 
> > In contrast to register asm operands, hard register constraints allow
> > more than just one register per operand.  Even more than just one
> > register per alternative.  For example, a valid constraint for an
> > operand is "{r0}{r1}m,{r2}".  However, this also means that we have to
> > make sure that each register is used at most once in each alternative
> > over all outputs and likewise over all inputs.  For asm statements this
> > is done by this patch during gimplification.  For hard register
> > constraints used in machine description, error handling is still a todo
> > and I haven't investigated this so far and consider this rather a low
> > priority.
> > 
> > There are 9/10 call sides for parse_{input,output}_constraint() which I
> > didn't dare to touch in the first run.  If this patch is about to be
> > accepted I could change those call sides and explicitly pass a null
> > pointer instead of overloading those functions as it is done right now.
> > I consider this an implementation nit and didn't want to clutter the
> > patch for reviewing.
> Makes sense. I tend to prefer the overloads when we can easily do so, so
> please make that change.  You're going to need a ChangeLog as well.
> 
> 
> With those changes this is OK as well.

Just to get this right, you prefer the overloads which means I leave the
patch as is, right?

As promised in the cover letter I will also look into the last failing
test.  What is a bit annoying, now, that some errors are thrown during
gimplification and some during expand.  For example, from pr87600-3.c
test1 fails during expand_asm_stmt() and test{2,3} fail during
parse_input_constraint().  Since after throwing an error during
gimplification we do not reach expand anymore and the dg-warnings for
those fail.  Currently I see two ways to fix this.  Simply split the
test into two files, or move the error handling part from expand to
gimplification.  For the moment I went with the former since that can be
quickly done ;-) and also without my patches some errors are thrown
during gimplification and some during expand, i.e., this kind of problem
already exists.  Thus, I don't have a strong opinion here but wanted to
make it clear upfront.

Since the general idea has been approved now, I will do a
bootstrap+regtest on multiple targets and probably also try to build
glibc+kernel with -fdemote-register-asm (I used that in the very
beginning as a benchmark in order to catch odd cases but didn't run
those tests for a while).  I will come up with a (hopefully) last patch
series including changelogs.  This manual testing might take some time.

Cheers,
Stefan

Reply via email to