On 30/01/14 14:01, Richard Biener wrote:
I'm curious on where you are seeing MEMs with a vector mode address.
What does that MEM even mean?
Yes, it looks strange but it was the way we came up with to implement an
instruction that loads from a pair of addresses.
From what I wrote previously to Richard.
"We have an instruction that loads two 32 bit values into a lower and
upper parts of a 64bit register using a base register and a 64 bit
register used as a double index.
So,
r1 <- [r0, r2]
means:
low(r1) = [r0 + low(r2)]
high(r1) = [r0 + high(r2)]"
From the referenced mail:
new_rtx: (mem:V4SI (plus:V4SI (vec_concat:V4SI (vec_concat:V2SI
(const_int 0 [0])
(const_int 0 [0]))
(vec_concat:V2SI (const_int 0 [0])
(const_int 0 [0])))
that should be invalid and somehow lacks the subreg:DI. The bug is where
that got lost.
I don't think it got lost. GCC was trying to simplify it. That's why my
patch was in simplify_subreg. GCC was trying to simplify a subreg in
DImode with this mem rtx as SUBREG_REG and offset 8.
--
Paulo Matos