- Loop invariant code motion is currently only done on array index expressions. - It assumes only a few possible types of subexpressions. - It also assumes all function calls have no side effects (like `std::max` for example). - The newly generated identifiers could clash with those from source program. - It would produce much nicer code if followed by common subexpression elimination
std::maxfor example).