LICM relies on variable MustExecute which is conservatively set to false in all non-headers.
It is used when we decide whether or not we want to hoist an instruction or a guard.
For instructions, the check in isSafeToExecuteUnconditionally is strictly more precise than this
variable, so we can safely give it up.
For the guards, it might be too conservative to use this variable, we can instead use a more precise
logic from MustExecute. Currently it is only NFC because IsMemoryNotModified is also conservatively
set to false for all non-headers, and we cannot hoist guards from non-header blocks. However once
we give up using IsMemoryNotModified and use a smarter check instead, this will allow us to hoist
guards from all mustexecute non-header blocks.