[PATCH] D86844: [LoopDeletion] Allows deletion of possibly infinite side-effect free loops
Atmn Patel via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Jan 7 08:56:41 PST 2021
atmnpatel added a comment.
In D86844#2484568 <https://reviews.llvm.org/D86844#2484568>, @fhahn wrote:
> In D86844#2481922 <https://reviews.llvm.org/D86844#2481922>, @xbolva00 wrote:
>
>> int a, b;
>>
>> int f(void) {
>> while (1) {
>> if (a != b) return 1;
>> }
>> return 0;
>> }
>>
>> int g(int a, int b) {
>> while (1) {
>> if (a != b) return 1;
>> }
>> return 0;
>> }
>>
>> LLVM does not catch these cases; gcc does.
>>
>> https://godbolt.org/z/jW7son
>
> Looks like `must progress` does not get added? If it gets added to the IR the loops get removed: https://godbolt.org/z/77v17P
I might be misunderstanding the standard here but since 1 is a non-zero constant expression, it can't be assumed to terminate by the implementation right? The relevant section from C11 at least is "An iteration statement whose controlling expression is not a constant expression that performs [explanation of what it deems as progress] may be assumed by the implementation to terminate" (C11 6.8.5 p6).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D86844/new/
https://reviews.llvm.org/D86844
More information about the cfe-commits
mailing list