You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Currently, the frontend generates the SMOVE ILM for an assignment of a
structure & derived type. The ILM is then expanded into loads & stores, or
other smove ILI (SMOVE, SMOVEI/SMOVES, XMOVE). What we want to do is expand to
a new ILI (GSMOVE) that gives us the addresses, nmes, and dtype of the source &
destination. It is then straightforward for other phases, to make
target-dependent decisions based on size/alignment of the aggregate.
xflag.n: add XBIT(2,0x800000) - expand IM_SMOVE into IL_GSMOVE in exp_rte.c
pgifeat.h:
- define the macro, USE_GSMOVE, as XBIT(2,0x800000)
- minor source cleanup (comments)
ilitp.n:
Add IL_GSMOVE arlnk arlnk nme nme stc
op1 - the source address.
op2 - the destination address.
nme1 - the names table entry for the source
nme2 - the namse table entry for the destination
stc - is the dtype of the struct (derived type).
expand.h: prototype for exp_remove_gsmove(void)
expand.c: add prototypes.
exp_rte.c
- expand_smove() - gen IL_GSMOVE if USE_GSMOVE is set
- add exp_remove_gsmove() - called from rmsmove.c; search the ILI blocks
of the function and if a GSMOVE is found, call _exp_smove() to transform
the ILI into loads/stores, SMOVEI, SMOVE, ...
- add gsmove_chk_block()
rmsmove.c - call gsmove_chk_block() if USE_GSMOVE is set
0 commit comments