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 :-) )

Reply via email to