Note: This is not a full commit. No tests were changed. Used for discussion
The llvm.assume intrinsic was historically not readnone because
control dependences need to be preserved. However, the intrinsic can
nowadays be represented as what it is, potentially UB if the condition
is false (or an operand bundle is violated). No effect but potentially
UB is readnone (in contrast to speculatable). While here we add
nosync and nofree to llvm.assume.