This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: different address spaces
- From: Paul Schlie <schlie at comcast dot net>
- To: Martin Koegler <mkoegler at auto dot tuwien dot ac dot at>
- Cc: <gcc at gcc dot gnu dot org>
- Date: Thu, 28 Apr 2005 15:43:22 -0400
- Subject: Re: different address spaces
> From: Martin Koegler <mkoegler@auto.tuwien.ac.at>
>> On Thu, Apr 28, 2005 at 12:37:48PM -0400, Paul Schlie wrote:
>>> Martin Koegler wrote:
>>> I have redone the implementation of the eeprom attribute in my prototype.
>>> It is now a cleaner solution, but requires larger changes in the core,
>>> but the changes in the core should not affect any backend/frontend, if
>>> it does not uses them (except a missing case in tree_copy_mem_area, which
>>> will cause an assertion to fail).
>>> ...
>>> +void
>>> +tree_copy_mem_area (tree to, tree from)
>>> ....
>>
>> Alternatively might it make sense to utilize the analogy defined in rtl.h?
>>
>> /* Copy the attributes that apply to memory locations from RHS to LHS. */
>> #define MEM_COPY_ATTRIBUTES(LHS, RHS) \
>> (MEM_VOLATILE_P (LHS) = MEM_VOLATILE_P (RHS), \
>> MEM_IN_STRUCT_P (LHS) = MEM_IN_STRUCT_P (RHS), \
>> MEM_SCALAR_P (LHS) = MEM_SCALAR_P (RHS), \
>> MEM_NOTRAP_P (LHS) = MEM_NOTRAP_P (RHS), \
>> MEM_READONLY_P (LHS) = MEM_READONLY_P (RHS), \
>> MEM_KEEP_ALIAS_SET_P (LHS) = MEM_KEEP_ALIAS_SET_P (RHS), \
>> MEM_ATTRS (LHS) = MEM_ATTRS (RHS))
>>
>> As unfortunately GCC already inconsistently maintains and copies attributes
>> to memory references, it seems that introducing yet another function to do
>> so will only likely introduce more inconsistency.
>>
>> Therefore wonder if it may be best to simply define MEM_ATTRS as you have
>> done, and then consistently utilize MEM_COPY_ATTRIBUTES to properly copy
>> attributes associated with memory references when new ones as may need to
>> be constructed (as all effective address optimizations should be doing, as
>> otherwise the attributes associated with the original reference will be
>> lost). I.e.:
>> ...
> If you want to use the memory attributes after all reload and optimization
> passes, GCC will need to be extended with the missing set of the memory
> attributes. This is not my goal (I try to provide the correct
> MEM_REF_FLAGS for the RTL expand pass with all necessary earlier steps
> to get the adress spaces information).
>
> Correcting all this, will be a lot of work. We may not forget the machine
> description, which can also create MEMs.
- I persume that machine descriptions which already don't maintain mem
attributes simply don't need them, as they most likely presume every
pointer simply references the same memory space. (hence don't care).
> I have updated my patch.
>
> For the MEM_AREA for the tree, I have eliminated many explicit set operation
> of this attribute (build3_COMPONENT_REF and build4_ARRAY_REF completly).
>
> For certain tree codes, the build{1,2,3,4} automatically generate the correct
> value of MEM_AREA out of their parameters. Only for INDIRECT_REF, this is
> not possible.
- if the original mem ref attributes derived from their originally enclosed
symbol were maintained, any arbitrary type of memory reference would work.
> If we want get every time the correct attribues, we need to add a source for
> the memory attributes to gen_rtx_MEM. For an automtic generation of the
> memory attributes, to few information is in the RTL available.
- that would seem like a convenient way to to it as opposed to folks having
to remember to do it properly.
> I have added compatibilty checking for memory areas as well as correct
> handling of them for ?:.
>
> The new version is at http://www.auto.tuwien.ac.at/~mkoegler/gcc/gcc1.patch
- thanks.