public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "anlauf at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug fortran/102510] Function call has unnecessary stride check Date: Tue, 28 Sep 2021 19:03:22 +0000 [thread overview] Message-ID: <bug-102510-4-MmWWEXTdrJ@http.gcc.gnu.org/bugzilla/> (raw) In-Reply-To: <bug-102510-4@http.gcc.gnu.org/bugzilla/> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102510 --- Comment #3 from anlauf at gcc dot gnu.org --- It helps to look at the (Fortran) context. As written, the subroutine version is declared with explicit size contiguous arrays. If the caller has a non-contiguous (strided) result array, it needs to pack/unpack. For the function version - as is - we might need a temporary to handle different situations. However, if you offer the compiler the chance to inline the calls, and using optimization to inline the packing, you may get better code than you think. Compile this example with -O3 -mavx: module p use iso_fortran_env, only: r32 => real32 real(r32), dimension(8) :: a,b real(r32), dimension(8) :: c1, c2 real(r32), dimension(16) :: d1, d2 contains subroutine add2vecs1(a,b,c) real(r32), dimension(8), intent(in) :: a,b real(r32), dimension(8), intent(out) :: c c = a + b end subroutine add2vecs1 function add2vecs2(a,b) real(r32), dimension(8), intent(in) :: a,b real(r32), dimension(8) :: add2vecs2 add2vecs2 = a + b end function add2vecs2 !- subroutine s1 () call add2vecs1 (a, b, c1) end subroutine s1 !- subroutine s2 () c2 = add2vecs2 (a, b) end subroutine s2 !- subroutine s3 () call add2vecs1 (a, b, d1(1:16:2)) end subroutine s3 !- subroutine s4 () d2(1:16:2) = add2vecs2 (a, b) end subroutine s4 end You'll find that s1 and s2 compile to the same code, and the strided versions s3 and s4 (at least this is my reading of the assembly, but correct me if I am wrong). Is there really more to expect?
next prev parent reply other threads:[~2021-09-28 19:03 UTC|newest] Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-09-28 2:17 [Bug fortran/102510] New: Function call has unnecessary aliasing check dwwork at gmail dot com 2021-09-28 8:54 ` [Bug fortran/102510] Function call has unnecessary stride check rguenth at gcc dot gnu.org 2021-09-28 13:55 ` dwwork at gmail dot com 2021-09-28 19:03 ` anlauf at gcc dot gnu.org [this message] 2021-09-28 19:26 ` dwwork at gmail dot com 2021-09-29 21:01 ` anlauf 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-102510-4-MmWWEXTdrJ@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: linkBe 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).