[Bug fortran/31016] New: Use __buildin_memcpy and __memcpy for array assignment
burnus at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Thu Mar 1 18:55:00 GMT 2007
For the most common array assignments where the size is known at compile-time,
we already use __buildin_memcpy; but the following cases were missed:
subroutine bar(a)
implicit none
real :: a(*),b(12)
b = a(1:12)
end subroutine
subroutine bar(a,b)
implicit none
real :: a(*),b(*)
a(1:12) = b(2:13)
end subroutine
And __buildin_memset can be used for:
subroutine bar(a)
implicit none
real :: a(*),b(12)
a(1:12) = 12
end subroutine
For the following examples, the __buildin_* function can not be used as the
size is not known at compile time, but the memory should be contiguous and thus
__memcpy can be used:
subroutine bar(a,n)
implicit none
integer :: n
real :: a(n), b(n)
a = b
end subroutine
For the following case, one could use memset, but I'm not sure whether it will
be on average be faster than a normal do loop. (Overhead of function call
versus the optimization of memset using e.g. copy-on-write.)
subroutine bar(a,n)
implicit none
integer :: n
real :: a(n)
a = 5
end subroutine
--
Summary: Use __buildin_memcpy and __memcpy for array assignment
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: enhancement
Priority: P3
Component: fortran
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: burnus at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31016
More information about the Gcc-bugs
mailing list