-We can perform the optimization, *we just cannot perform it in C*.
-Instead, we have to perform it in LLVM IR (or any other IR with a suitable semantics).
-Specifically, signed integer overflow in LLVM yields a `poison` result.
-It is not UB to produce `poison`, it is just UB to use `poison` in certain ways (the details do not matter here).
-In a call to `sum_up(INT_MAX, 1, 0)`, the `s` variable introduced by loop hoisting is unused, so the fact that its value is `poison` does not matter!
+So far, what we have seen is that the optimization is not *correct* when being performed on a C program.
+But when LLVM performs these optimizations, it does not consider the program to be written in C---it considers the program to be written in LLVM IR, which has a different semantics than C.
+Specifically, signed integer overflow in LLVM IR yields a `poison` result.
+It is not UB to produce `poison`, it is just UB to use `poison` in certain ways (the details of this do not matter here).
+In a call to the optimized `sum_up(INT_MAX, 1, 0)`, the `s` variable introduced by loop-invariant code motion is unused, so the fact that its value is `poison` does not matter!
+
+Due to this behavior of signed integer overflow, this case of loop-invariant code motion is *correct* if we consider it as an optimization on programs that are written in LLVM IR.[^cheat]
+The "price" we pay for this is that replacing `INT_MAX+1` by `unreachable` is not *correct* in LLVM IR, since it is not UB.