https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113933
--- Comment #25 from Segher Boessenkool <segher at gcc dot gnu.org> ---
(In reply to John David Anglin from comment #24)
> There are a couple of issues. The pa backend only supports memory
> accesses that load to a register or store from a register. LRA was
> creating insns like the following:
>
> (insn 387 386 35 2 (set (subreg:SI (reg/v:OI 132 [ e ]) 28)
> (subreg:SI (reg/v:OI 452 [orig:132 e ] [132]) 28))
> "/home/dave/gnu/gcc/gcc/gcc/testsuite/gcc.c-torture/compile/pr92618.c":18:15
> 42 {*pa.md:2195}
> (nil))
That is a simple 32-bit register-to-register move, which is quite expected
here? It should work fine if your OImode datums are stored in 8 consecutive
GPR regs.
> There doesn't seem to be any good reason to allow register modes that
> aren't supported in pa.md.
Obviously. And LRA tries to use such modes? That can never work, no? So
we should do something about that?
> I debated whether to allow complex 16-byte
> modes in the general registers. There's one test that fails if I disallow
> 16-byte modes in the general registers. It uses an asm to load a complex
> long long value to a register. It is xfailed on a number of targets
> because they don't have enough registers.
But it's just four hardware registers for you, and you have plenty?
If your ABI doesn't require this (for parameter passing), I don't think
there is much benefit though (and if it does require it, of course you
have to, no choice then :-) )