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