[LLVMdev] Is infinite empty loop dead code?
Nick Lewycky
nicholas at mxc.ca
Wed Nov 14 13:16:35 PST 2012
Shuxin Yang wrote:
> Hi, dear Wenren:
>
> Thank you so much for sharing this info. I really appreciate it.
> Now I can move on deleting dead non-countable loops.
> Thank you again!
Shuxin, please don't delete infinite loops, since it allows the code
after them to run when it shouldn't. In C++03 and C89, it's invalid to
do so. C++11 has text that to the effect that every thread must continue
towards some side-effect, but then you'll need to make llvm only delete
dead loops when you know the language permits it. In particular,
ignoring C and C++ and just focussing on LLVM IR itself, there is
nothing in LLVM IR that permits you to delete an empty
potentially-infinite loop. Maybe you could write such a new optimization
but put it in its own pass and the frontend chooses whether to run it
based on its knowledge of the language semantics at hand.
Finite loops are always fair game.
See http://blog.regehr.org/archives/140 and
http://blog.regehr.org/archives/161 . When that article was published we
fixed the bug that caused us to delete infinite loops. Please don't
re-introduce the bug.
Also, the text in C99 appears to allow us to terminate *iteration
statements*, but does not allow us to terminate infinite recursion. So
if llvm transforms the recursion into iteration, we need to make sure
not to remove it. For this reason, I consider the text in C99
broken/useless. I haven't looked at C11.
Nick
> Shuxin
>
>
> On 11/14/12 12:56 AM, 陳韋任 (Wei-Ren Chen) wrote:
>> On Wed, Nov 14, 2012 at 12:22:33AM -0800, Shuxin Yang wrote:
>>> I do some google, I cannot find the answer...
>>> I check C std, I cannot find answer either.
>>>
>>> Delete infinite empty loop is boring, but if C/C++ lawyers could tell it
>>> is safe to to so,
>>> it would obviate the need to prove a non-countable loop infinite or not
>>> before
>>> DCE can delete it.
>>>
>>> That is the answer I'm waiting for to delete a disgusting dead
>>> non-countable loop in my way.
>> Perhaps Duncan will give you a proper keyword to search in GCC/LLVM
>> ML archieve. I found a page [1], and iiuc, the C standard allow the
>> implementation (i.e., the compiler) to remove such empty infinite loop.
>>
>> Regards,
>> chenwj
>>
>> [1]
>> https://www.securecoding.cert.org/confluence/display/seccode/MSC40-C.+Do+not+use+an+empty+infinite+loop
>>
>>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list