public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "tkoenig at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug fortran/48636] Enable more inlining with -O2 and higher
Date: Wed, 20 Apr 2011 16:41:00 -0000 [thread overview]
Message-ID: <bug-48636-4-9NQvnixFMV@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-48636-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48636
--- Comment #10 from Thomas Koenig <tkoenig at gcc dot gnu.org> 2011-04-20 16:40:46 UTC ---
(In reply to comment #6)
> Not strictly related to inlining, but in the new descriptor we'll have a field
> specifying whether the array is simply contiguous, so it might make sense to
> generate two loops for each loop over the array in the source, one for the
> contiguous case where it can be vectorized etc. and another loop for the
> general case. This might reduce the profitability of inlining.
Consider the following, hand-crafted matmul:
Here, we have three nested loops. The most interesting one is
the innermost loop of the matmul, which we vectorize by inlining if we omit
the call to my_matmul with non-unity stride for a when compiling with
-fwhole-program -O3.
How many versions of the loop should we generate? Two or eight, depending
on what the caller may do? ;-)
module foo
implicit none
contains
subroutine my_matmul(a,b,c)
implicit none
integer :: count, m, n
real, dimension(:,:), intent(in) :: a,b
real, dimension(:,:), intent(out) :: c
integer :: i,j,k
m = ubound(a,1)
n = ubound(b,2)
count = ubound(a,2)
c = 0
do j=1,n
do k=1, count
do i=1,m
c(i,j) = c(i,j) + a(i,k) * b(k,j)
end do
end do
end do
end subroutine my_matmul
end module foo
program main
use foo
implicit none
integer, parameter :: factor=100
integer, parameter :: n = 2*factor, m = 3*factor, count = 4*factor
real, dimension(m, count) :: a
real, dimension(count, n) :: b
real, dimension(m,n) :: c1, c2
real, dimension(m/2, n) :: ch_1, ch_2
call random_number(a)
call random_number(b)
call my_matmul(a,b,c1)
c2 = matmul(a,b)
if (any(abs(c1 - c2) > 1e-5)) call abort
call my_matmul(a(1:m:2,:),b,ch_1)
ch_2 = matmul(a(1:m:2,:),b)
if (any(abs(ch_1 - ch_2) > 1e-5)) call abort
end program main
next prev parent reply other threads:[~2011-04-20 16:41 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-15 21:05 [Bug fortran/48636] New: " tkoenig at gcc dot gnu.org
2011-04-16 11:22 ` [Bug fortran/48636] " rguenth at gcc dot gnu.org
2011-04-17 10:23 ` dominiq at lps dot ens.fr
2011-04-17 10:44 ` hubicka at gcc dot gnu.org
2011-04-17 13:32 ` tkoenig at gcc dot gnu.org
2011-04-17 14:12 ` dominiq at lps dot ens.fr
2011-04-20 11:22 ` jb at gcc dot gnu.org
2011-04-20 12:29 ` burnus at gcc dot gnu.org
2011-04-20 13:10 ` jb at gcc dot gnu.org
2011-04-20 15:42 ` burnus at gcc dot gnu.org
2011-04-20 16:41 ` tkoenig at gcc dot gnu.org [this message]
2011-04-20 18:15 ` jb at gcc dot gnu.org
2011-05-04 16:23 ` hubicka at gcc dot gnu.org
2011-05-04 17:31 ` burnus at gcc dot gnu.org
2011-06-04 18:08 ` hubicka at gcc dot gnu.org
2012-07-03 17:44 ` jamborm at gcc dot gnu.org
2012-08-11 10:50 ` jamborm at gcc dot gnu.org
2012-08-21 6:54 ` hubicka at gcc dot gnu.org
2012-08-21 8:15 ` hubicka at gcc dot gnu.org
2012-09-12 21:52 ` hubicka at gcc dot gnu.org
2012-10-16 16:39 ` hubicka at gcc dot gnu.org
2012-10-16 17:58 ` dominiq at lps dot ens.fr
2012-10-16 20:59 ` dominiq at lps dot ens.fr
2012-10-17 12:20 ` jakub at gcc dot gnu.org
2012-10-17 13:13 ` dominiq at lps dot ens.fr
2012-10-17 14:06 ` dominiq at lps dot ens.fr
2012-10-19 8:45 ` vincenzo.innocente at cern dot ch
2012-10-20 10:35 ` hubicka at gcc dot gnu.org
2012-10-20 11:22 ` dominiq at lps dot ens.fr
2012-10-20 12:11 ` tkoenig at gcc dot gnu.org
2012-10-28 10:08 ` hubicka at gcc dot gnu.org
2012-10-28 10:11 ` hubicka at gcc dot gnu.org
2012-10-28 11:27 ` vincenzo.innocente at cern dot ch
2012-11-07 9:34 ` hubicka at gcc dot gnu.org
2012-11-07 11:18 ` hubicka at gcc dot gnu.org
2012-11-08 16:46 ` hubicka at gcc dot gnu.org
2012-11-11 18:15 ` hubicka at gcc dot gnu.org
2012-11-12 12:16 ` hubicka at gcc dot gnu.org
2012-11-12 12:45 ` izamyatin at gmail dot com
2012-11-14 23:22 ` hubicka at gcc dot gnu.org
2012-11-14 23:54 ` Jan Hubicka
2012-11-14 23:55 ` hubicka at ucw dot cz
2012-11-15 2:29 ` hubicka at gcc dot gnu.org
2012-11-16 14:43 ` dominiq at lps dot ens.fr
2013-03-01 17:49 ` wschmidt at gcc dot gnu.org
2013-03-04 17:54 ` wschmidt at gcc dot gnu.org
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=bug-48636-4-9NQvnixFMV@http.gcc.gnu.org/bugzilla/ \
--to=gcc-bugzilla@gcc.gnu.org \
--cc=gcc-bugs@gcc.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).