This patch introduces new nuw and nsw operand bundles, to indicate
no-unsigned-wrap and no-signed-wrap for the computation of the result of
a call.
Initially, functions that want to use it need to opt-in, as there are
many cases where the bundle probably makes little sense. This mirrors
fast-math flags, which can be specified directly for calls returning
floating point values. Adding nuw/nsw as operand bundles is very
lightweight. If there are a lot of users, it might make sense to
consider adding the flags directly to calls, but I think operand bundles
allow us to make progress quickly and see how widely useful this
actually is.
Tot start with, llvm.matrix.multiply will use it, but other candidates
are the integer reduction intrinsics.
I don't think a generic definition here is really useful; the semantics are really specific to the intrinsic in question.
In particular, for matrix multiplication, this definition is a but unclear. The order of the addition operations isn't defined for matrix multiplication; that matters for nsw.