sanjoy added a comment. IIUC this is also a correctness fix, right? Since you could have had: volatile boolean always_false = ...; for (...) if (always_false) assume(false); and hoisting out `assume(false)` to the loop preheader will make the loop appear dead. http://reviews.llvm.org/D20653