Some intrinsics, like s/uadd.with.overflow and umul.with.overflow, are already strength reduced.
This change adds other arithmetic intrinsics: s/usub.with.overflow, smul.with.overflow.
It completes the work on PR20194.
Beside that, I did also a refactoring: I extracted the creation of the resulting struct in to a separate function CreateOverflowResult().
Nit: CreateOverflowResultTuple or CreateOverflowTuple
extremely minor, feel free to ignore if you disagree