This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]