[LLVMdev] Loop elimination with floating point counter.
Syoyo Fujita
syoyofujita at gmail.com
Thu Jan 8 04:36:09 PST 2009
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) {
}
}
$ 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
More information about the llvm-dev
mailing list