This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug fortran/40598] Some missed optimizations in array assignment
- From: "burnus at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 30 Jun 2009 09:46:55 -0000
- Subject: [Bug fortran/40598] Some missed optimizations in array assignment
- References: <bug-40598-10374@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #2 from burnus at gcc dot gnu dot org 2009-06-30 09:46 -------
array(:,1) = 0
would then become
ARRAY_RANGE_REF <array, ...> = { }
and
array(:,1) = [1,2,3]
would then become
ARRAY_RANGE_REF <array, ...> = { 1,2,3 }
If I recall correctly, using memcopy/memset causes alias analysis problems as
pointerOpteratingFunction(array,...)
marks "array" as maybe-aliasing, cf. PR 40168 and especially
http://gcc.gnu.org/ml/fortran/2009-05/msg00287.html
* * *
ARRAY_REF
These nodes represent array accesses. The first operand is the array; the
second is the index. To calculate the address of the memory accessed, you must
scale the index by the size of the type of the array elements. The type of
these expressions must be the type of a component of the array. The third and
fourth operands are used after gimplification to represent the lower bound and
component size but should not be used directly; call array_ref_low_bound and
array_ref_element_size instead.
ARRAY_RANGE_REF
These nodes represent access to a range (or ?slice?) of an array. The operands
are the same as that for ARRAY_REF and have the same meanings. The type of
these expressions must be an array whose component type is the same as that of
the first operand. The range of that array type determines the amount of data
these expressions access.
(from http://gcc.gnu.org/onlinedocs/gccint/Expression-trees.html)
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40598