[llvm-dev] About LoopDeletion and infinite loops ... again! (RFC?)
Marcello Maggioni via llvm-dev
llvm-dev at lists.llvm.org
Mon Oct 2 01:21:29 PDT 2017
> On Sep 29, 2017, at 9:02 PM, Hal Finkel <hfinkel at anl.gov> wrote:
>
>
> On 09/29/2017 10:02 PM, Marcello Maggioni via llvm-dev wrote:
>> I see the usecase for mixed language compilation (that’s probably why you fancy something like the side-effect thing instead right?)
>
> It's also about not having parameterized semantics for the IR. I'd certainly find that undesirable. We could make it part of datalayout, or similar, but that has problems with mixed-language compilation. It also has problems with C, where we generally get to assume that loops terminate, but loops with a constant controlling condition (at the source level) can be infinite. Whether or not something is a constant condition at the source level is something that we need the frontend to mark only for specific loops.
>
>>
>> BTW if the other proposal passes can we basically assume that if a loop doesn’t have the sideeffect intrinsic in it is then removable?
>
> If it does not have the sideeffect intrinsic, or some other actual side effect (or atomic, etc.), then yes.
>
Ok, great, that seems to match with my original understanding then!
>>
>> That patch seems to suggest that in its current state llvm is mostly broken for languages that consider all infinite loops as unremovable ... (but I didn’t read all the discussion)
>
> As I understand it, it is broken in places, but we also don't take advantage of assuming that loops terminate as much as we could (assuming we fully commit to that assumption).
>
Yeah, that’s what I meant with “mostly”, but probably it would have been better “sometimes” :P
Thanks!
Marcello
> -Hal
>
>>
>> Marcello
>>
>> Sent from my iPhone
>>
>>> On Sep 29, 2017, at 7:43 PM, Davide Italiano <davide at freebsd.org> wrote:
>>>
>>> On Fri, Sep 29, 2017 at 7:17 PM, Marcello Maggioni via llvm-dev
>>> <llvm-dev at lists.llvm.org> wrote:
>>>> Hello!
>>>>
>>>> I read a bunch of discussions about the matter on this very mailing-list
>>>> that are relatively recent or relatively old and I couldn’t find much
>>>> agreement on the matter, so … here again :D
>>>>
>>>> LoopDeletion and infinite loops …
>>>>
>>>> Currently LoopDeletion bails if non-detectable trip count loops are
>>>> encountered and that’s fine, there are languages where infinite loops
>>>> without side effects cannot be removed.
>>>>
>>>> If I read the C++ spec right though N4527 (sec 1.10) point 27 says:
>>>>
>>>> 27 The implementation may assume that any thread will eventually do one of
>>>> the following:
>>>>
>>>> 27.1 — terminate,
>>>>
>>>> 27.2 — make a call to a library I/O function
>>>>
>>>> (27.3)— read or modify a volatile object, or
>>>>
>>>> (27.4)— perform a synchronization operation or an atomic operation.
>>>>
>>>> [Note: This is intended to allow compiler transformations such as removal of
>>>> empty loops, even when
>>>>
>>>> termination cannot be proven. — end note ]
>>>>
>>>>
>>>> So, the spec seems to be explicitly calling out that removing infinite loops
>>>> is ok unless they do any of the things mentioned there (at least that is my
>>>> interpretation, is that correct?).
>>>>
>>>>
>>>> If that is the case we could be missing out for languages that have such a
>>>> behavior (and in particular in C++).
>>>>
>>>> I was wondering how it would be viewed the possibility of adding a flag to
>>>> loop deletion that allows the removal of loops with loop counts that are not
>>>> SCEVable.
>>>>
>>> You probably have seen it, but, for reference
>>> https://reviews.llvm.org/D38336 (which goes in the exact opposite direction).
>>>
>>> I don't necessarily fancy the idea of having a flag, instead, maybe,
>>> the frontend could emit enough information to tell the optimizer
>>> whether it is safe to remove the loop?
>>>
>>> Thanks,
>>>
>>> --
>>> Davide
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>
> --
> Hal Finkel
> Lead, Compiler Technology and Programming Languages
> Leadership Computing Facility
> Argonne National Laboratory
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171002/c9ddd130/attachment.html>
More information about the llvm-dev
mailing list