https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87733

--- Comment #19 from Rich Felker <bugdal at aerifal dot cx> ---
> This looks like bad inline asm.  You seem to be using $2, $8, $9 and $sp 
> explicitly and not letting the compiler know you are using them.

$2, $8, and $9 are all explicitly outputs. All changes to $sp are reversed
before the asm ends and there are no memory operands which could be sp-based
and thereby invalidated by temp changes to it.

> I think you want to change those to %0, %2 and %3 and adding one for $sp?

All that does it make the code harder to read and more fragile against changes
to the order the constraints are written in.

> ...and "n" is an argument register, so why use "ir" for n's constraint? 
> Shouldn't that just be "r"?  Maybe that is confusing IRA/LRA/reload?

The code has been reduced as a standalone example that still reproduced the
bug, from a static inline function that was inlined into a function with
exactly the same signature. The static inline has a constant n after constant
propagation for almost all places it gets inlined, so it "ir" constraint makes
sense there. However, removing the "i" does not make the problem go away
anyway.

Reply via email to