[llvm-commits] [llvm] r42075 - in /llvm/trunk: lib/Transforms/Scalar/LICM.cpp test/Transforms/LICM/2007-09-17-PrompteValue.ll
Dan Gohman
djg at cray.com
Tue Sep 18 15:38:06 PDT 2007
> It is not safe, because cond_true.i is a dead basic-block. The
> question is -- Is it LICM's responsibility to evaluate conditions and
> identify dead code or let other passes handle this earlier?. For
> example here, instruction combiner will fold comparison and cfg
> simplifier will take care of cond_true.i before LICM is executed in
> standard pass sequence.
Ok, so let's tweak the testcase again:
define i32 @foo(%struct.decision* %p, %struct.decision* %q) {
entry:
br label %blah.i
blah.i: ; preds = %cond_true.i, %entry
%tmp3.i = icmp eq %struct.decision* null, %q ; <i1> [#uses=1]
br i1 %tmp3.i, label %clear_modes.exit, label %cond_true.i
cond_true.i: ; preds = %blah.i
%tmp1.i = getelementptr %struct.decision* %p, i32 0, i32 0 ; <i8*> [#uses=1]
store i8 0, i8* %tmp1.i
br label %blah.i
clear_modes.exit: ; preds = %blah.i
call void @exit( i32 0 )
unreachable
}
declare void @exit(i32)
It's no longer possible for any part of the optimizer to prove the loop
is dead. LICM is still putting a load of %tmp1.i in the entry block for
this test, and that's unsafe.
Dan
--
Dan Gohman, Cray Inc.
More information about the llvm-commits
mailing list