The manual says that the first argument of a TARGET_MEM_REF
"is @code{TMR_SYMBOL} and must be a @code{VAR_DECL} of an object
with a fixed address."
The TARGET_MEM_REF below has as its first argument an ADDR_EXPR
and not a VAR_DECL as the manual claims. The code I looked at
seems to be prepared for the first argument to be pretty much
any address, including an SSA_NAME. What should the manual be
updated to, to make it accurate?
The description also says:
The second argument is @code{TMR_BASE} and the third one is
@code{TMR_INDEX}.
and gives the formula below to compute its address:
&TMR_SYMBOL + TMR_BASE + TMR_INDEX * TMR_STEP + TMR_OFFSET
The second argument of my TARGET_MEM_REF is a pointer and not
something I'd expect to see added to the address of something.
Is the second argument meant to have a dual purpose like in
a MEM_REF?
Thanks
Martin
<target_mem_ref 0x7fffe400f440
type <pointer_type 0x7fffe5197738
type <pointer_type 0x7fffe7c0fe70 tree type <union_type
0x7fffe7c0fd20 tree_node>
sizes-gimplified public unsigned type_6 DI
size <integer_cst 0x7fffea7f5f48 constant 64>
unit-size <integer_cst 0x7fffea7f5f60 constant 8>
align:64 warn_if_not_align:0 symtab:0 alias-set -1
canonical-type 0x7fffe7c0fdc8
pointer_to_this <pointer_type 0x7fffe706e888>
reference_to_this <reference_type 0x7fffe75b3b28>>
readonly sizes-gimplified unsigned DI size <integer_cst
0x7fffea7f5f48 64> unit-size <integer_cst 0x7fffea7f5f60 8>
user align:128 warn_if_not_align:0 symtab:0 alias-set -1
canonical-type 0x7fffe6836dc8>
readonly
arg:0 <addr_expr 0x7fffe63dfd60
type <pointer_type 0x7fffe4b2d540 type <array_type 0x7fffe6836348>
public unsigned DI size <integer_cst 0x7fffea7f5f48 64>
unit-size <integer_cst 0x7fffea7f5f60 8>
align:64 warn_if_not_align:0 symtab:0 alias-set -1
canonical-type 0x7fffe4b2d540>
readonly constant
arg:0 <var_decl 0x7fffe6838e10 fname_vars type <array_type
0x7fffe6836348>
readonly used static tree_1 tree_2 tree_6 read decl_5
decl_6 BLK /src/gcc/trunk/gcc/c-family/c-common.c:301:26
size <integer_cst 0x7fffea634240 constant 512>
unit-size <integer_cst 0x7fffe90db720 constant 64>
align:256 warn_if_not_align:0 context
<translation_unit_decl 0x7fffea803168 /build/tmp/c-common.ii> initial
<constructor 0x7fffe9614e88> chain <type_decl 0x7fffe6833a18 fname_var_t>>>
arg:1 <integer_cst 0x7fffe480ce70 type <pointer_type
0x7fffe666a3f0> constant 0>
arg:2 <ssa_name 0x7fffe559a240
type <integer_type 0x7fffea815000 sizetype public unsigned
type_6 DI size <integer_cst 0x7fffea7f5f48 64> unit-size <integer_cst
0x7fffea7f5f60 8>
align:64 warn_if_not_align:0 symtab:0 alias-set -1
canonical-type 0x7fffea815000 precision:64 min <integer_cst
0x7fffea7f5f78 0> max <integer_cst 0x7fffea7f65c0 18446744073709551615>>
visited
def_stmt _6 = ivtmp.4177_35 * 16;
version:6
ptr-info 0x7fffe63de020>>