[LLVMdev] Loop elimination with floating point counter.
Devang Patel
dpatel at apple.com
Thu Jan 8 07:42:31 PST 2009
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
More information about the llvm-dev
mailing list