optimizer: keep statements that may throw from being optimized by SROA (#48068)
SROA should verify a statement won't throw, otherwise it can't be
eliminated safely.
Note that this commit skips the nothrow-ness verification on `getfield`
statement. This is acceptable because currently we are unable to prove
it in the presence of potentially undefined fields. This is okay because
our SROA pass will eliminate such a `getfield` statement only if it
determines that the forwarded value safely defines the potentially
undefined field.