Hi! Frederik stumbled over a related thing.
On 2020-04-03T12:36:29+0200, Richard Biener <rguent...@suse.de> wrote: > On Fri, 3 Apr 2020, Thomas Schwinge wrote: >> On 2020-04-02T11:12:48+0200, Richard Biener <rguent...@suse.de> wrote: >> > On Wed, 1 Apr 2020, Jason Merrill wrote: >> > >> >> On 4/1/20 9:36 AM, Richard Biener wrote: >> >> > This does away with enabling -ffinite-loops at -O2+ for all languages >> >> > and instead enables it selectively for C++ only. >> >> > I'm retesting the following [...] >> >> ..., which got pushed in commit 75efe9cb1f8938a713ce540dc3b27bc2afcd3fae >> "c/94392 - only enable -ffinite-loops for C++". >> >> I pushed the attached in commit 4f6a0888de52a2e523a6fd4235fe7f8193819c3b >> 'Revert "[nvptx, libgomp] Update pr85381-{2,4}.c test-cases" [PR89713, >> PR94392]'. As can be observed in two nvptx offloading test cases >> regressing, 'apparently now again "empty oacc loops are" no longer >> "removed before expand"' (quoting myself from the commit log, adapting >> Tom's commit log snippet from the reverted commit). >> >> It's not obvious to me how the "finite loop" property discussed/changed >> in Richard's commit 75efe9cb1f8938a713ce540dc3b27bc2afcd3fae "c/94392 - >> only enable -ffinite-loops for C++" relates to the previously observed >> optimization of removing "empty oacc loops [...] before expand" (after >> PR89713 commit c29c92c789d93848cc1c929838771bfc68cb272c "PR >> tree-optimization/89713 - Assume loop with an exit is finite"), but >> examining that in detail is for another day. > > For C we no longer have -ffinite-loops in effect but for C++ we still > do. But since the testcase is c/c++ common I'd have expected it > now fails "split" ... so an explicit -fno-finite-loops or > -ffinite-loops with an explanation would be easier. (Thanks, and ACK; still have to look into that.) > Note there's now also the opportunity to set the loop flag for > OpenACC/OpenMP annotated loops if any of that guarantees finiteness. > (for GCC11 only please) On 2020-04-03T13:34:18+0200, Jakub Jelinek <ja...@redhat.com> wrote: > Dunno about OpenACC, but OpenMP loops guarantee finiteness, as the number of > iterations must be computable before the loop and must fit into the type in > which that count is computed without overflows. Specifically, is that computable at run-time or compile-time? Similar for OpenACC. For example, OpenACC 3.0, 2.9. "Loop Construct", "Restrictions": "A loop associated with a 'loop' construct that does not have a 'seq' clause must be written such that the loop iteration count is computable when entering the loop construct". (This can only viewed by members of the OpenACC GitHub organization, but I wanted to share the pointer anyway, and can relay discussion as necessary.) For the next version of OpenACC (soon!), this is being further clarified as per the current discussion in <https://github.com/OpenACC/openacc-spec/pull/320> "Proposed changes for range-based for loops and != operator", which should be relevant here: | - A loop associated with a 'loop' construct that does not have a 'seq' | clause must be written to meet all of the following conditions: | | - The loop variable must be of integer, C/C++ pointer, or C++ | random-access iterator type. | | - The loop variable must monotonically increase or decrease in the | direction of its termination condition. | | - The loop iteration count must be computable in constant time when | entering the 'loop' construct. | | For a C++ range-based 'for' loop, the loop variable identified by the | above conditions is the internal iterator, such as a pointer, that | the compiler generates to iterate the range. It is not the variable | declared by the 'for' loop. (Notice: "computable in constant time" (which means: not computable only by actually iterating the whole loop structure), and "computable [...] when entering" (which, if I got that right, means: at run-time, not necessarily already compile-time?). Grüße Thomas ----------------- Mentor Graphics (Deutschland) GmbH, Arnulfstraße 201, 80634 München / Germany Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Alexander Walter