[LLVMdev] Loop elimination with floating point counter.
Owen Anderson
resistor at mac.com
Thu Jan 8 09:34:19 PST 2009
It's because with 1.0f, the loop index is simplified into an integer.
With 1.2f, it isn't. The loop deletion pass is dependent on the loop
analyses being able to determine that the loop is finite, which they
don't attempt to do for loops with floating point indices. Attempting
to do so would require additional reasoning about floating point
precision issues.
--Owen
On Jan 8, 2009, at 9:22 AM, Syoyo Fujita wrote:
> Hi Devang,
>
> Thanks. Yes, in the case variable i incremented by 1.0f is optimized.
> I don't know why...
> Anyway, I've filed this problem into bugzilla(Bug 3299)
>
> --
> Syoyo
>
> On Fri, Jan 9, 2009 at 12:42 AM, Devang Patel <dpatel at apple.com>
> wrote:
>>
>> On Jan 8, 2009, at 4:36 AM, Syoyo Fujita wrote:
>>
>>> Hi LLVM-ers,
>>>
>>> I'd like to eliminate dead loop with floating point counter using
>>> LLVM, but the following loop wasn't optimized by opt.
>>>
>>> void
>>> func() {
>>> float i;
>>> for (i = 0.0f; i < 1000.0f; i += 1.2f) {
>>> }
>>> }
>>
>> FWIW, LLVM optimizer can eliminate this loop if i is incremented by
>> 1.0f
>>
>> Pl. file a bugzilla report.
>> Thanks,
>> -
>> Devang
>>>
>>>
>>> $ clang -emit-llvm-bc floop.c
>>> $ opt -std-compile-opts floop.bc | llvm-dis
>>>
>>> define void @func(...) nounwind {
>>> entry:
>>> br label %forinc
>>>
>>> forinc: ; preds = %forinc, %entry
>>> %i.0.reg2mem.0 = phi float [ 0.000000e+00, %entry ], [ %add,
>>> %forinc
>>> ] ; <float> [#uses=1]
>>> %add = add float %i.0.reg2mem.0,
>>> 0x3FF3333340000000 ; <float>
>>> [#uses=2]
>>> %cmp = fcmp olt float %add, 1.000000e+03 ;
>>> <i1> [#uses=1]
>>> br i1 %cmp, label %forinc, label %afterfor
>>>
>>> afterfor: ; preds = %forinc
>>> ret void
>>> }
>>>
>>> What I expected is just one instruction "ret void" in function
>>> "func".
>>>
>>> Should I specify some specific optimizer pass for opt?
>>> If so, what is the right optimization pass to specify for opt to
>>> remove dead loop with floating point counter?
>>>
>>> I've tested some loop optimization pass, e.g. -licm, -loop-deletion,
>>> but nothing takes effect.
>>>
>>> FYI, gcc -O3 also can't optimize such a loop, but icc -O3 can.
>>>
>>> LLVM and clang used are recent version from svn.
>>>
>>> Thanks in advance.
>>>
>>> --
>>> Syoyo
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
>>
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
> _______________________________________________
> 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