On 11/16/18 14:50, Segher Boessenkool wrote:
Hi!
On Wed, Nov 14, 2018 at 11:22:58AM -0800, Michael Eager wrote:
The (mem:SI) is converted to (mem:QI).
The return from make_extract() is
(zero_extract:SI (mem:QI (reg/v/f:SI 50 [ gp ]))
(const_int 1 [0x1])
(const_int 2 [0x2]))
The target has an instruction pattern for zero_extract, but it matches
SI values, not QI. So the instruction which implements a test of a bit
flag is never generated.
The RTL documentation says:
If @var{loc} is in memory, its mode must be a single-byte integer mode.
But obviously various ports use other modes, too. I wonder if that ever
worked well.
Thanks. I hadn't noticed this.
Does anyone have any idea why there is a restriction on the mode?
Other instruction patterns don't place arbitrary restriction on the
memory access mode.
--
Michael Eager eager@xxxxxxxxxx
1960 Park Blvd., Palo Alto, CA 94306