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

--- Comment #40 from John David Anglin <danglin at gcc dot gnu.org> ---
Jeff,

I don't think these split instructions make a lot of sense on PA-RISC.

(insn 280 277 281 30 (set (reg/f:SI 20 %r20 [480])
        (plus:SI (reg/f:SI 19 %r19 [orig:127 prephitmp_37 ] [127])
            (const_int 396 [0x18c]))) "../Python/compile.c":5970:20 120
{addsi3}
     (nil))
(insn 281 280 284 30 (set (mem:SI (reg/f:SI 20 %r20 [480]) [4 MEM[(int *)_107 +
396B]+0 S4 A32])
        (reg:SI 12 %r12 [orig:134 vect_pretmp_36.2452 ] [134]))
"../Python/compile.c":5970:20 42 {*pa.md:2193}
     (nil))

They increase code size and register pressure.  That may lead to unnecessary
spills and longer branches.  They increase probability of problems like the
one in this PR.

I suspect the two instructions generated are actually slower than one with a
nonzero memory offset.  It's not clear that memory accesses with a zero offset
are faster than ones with nonzero offsets.

Integer loads and stores on pa support fairly large offsets.

I think we need to look at why this happens frequently.

Thoughts?

Reply via email to