The clang builtins have the same semantics as the stdlib functions.
The stdlib functions are defined in section 7.20.6.1 of the C standard with:
"If the result cannot be represented, the behavior is undefined."
So I think that lets us mark the negation with 'nsw' because "sub i32 0, INT_MIN" would be UB/poison.