This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
ADDRESSOF handling in alpha_expand_block_move
- From: kenner at vlsi1 dot ultra dot nyu dot edu (Richard Kenner)
- To: rth at redhat dot com
- Cc: gcc at gcc dot gnu dot org
- Date: Sun, 3 Aug 03 09:03:29 EDT
- Subject: ADDRESSOF handling in alpha_expand_block_move
I don't understand what you are trying to do there. Why go inside the
ADDRESSOF?
What's happening for me is that orig_src is
(mem/s:BLK (addressof:DI (mem/s:SI (reg/f:DI 65 virtual-stack-vars) [64 S4 A32]) 74 62eea0) [64 hdr_data+0 S4 A32])
So tmp becomes (mem/s:SI (reg/f:DI 65 virtual-stack-vars) [64 S4 A32])
and dest_reg becomes that as well.
But other code assumes that's a register, specifically when it makes
the gen_insx insn as
(insn 466 465 0 (set (reg:DI 180)
(unspec:DI[
(mem/s:DI (reg/f:DI 65 virtual-stack-vars) [64 S8 A32])
(const_int 32 [0x20])
(reg:DI 181)
] 2)) -1 (nil)
(nil))
That doesn't match since the first operan of the upspec is required to
be a register.
How is this supposed to work?
(The test case is several thousand lines of Ada.)