Is there a simple way to check APInt multiplication overflow?

Hello,

I have two APInt variables, which are got by ConstantSDNode::getAPIntValue().

Is there a simple way to know if their multiplication overflows?

For example, if both APInt vars contain a int32_t,
APInt a, b;
Then I think

if (a.getMinSignedBits() + b.getMinSignedBits() > 32)
a*b must exceeds int32_t <=> overflow happens;

Is my way OK?

Ben Shi

Hello,

I have two APInt variables, which are got by ConstantSDNode::getAPIntValue().

Is there a simple way to know if their multiplication overflows?

There's APInt::smul_ov(const APInt &RHS, bool &Overflow)

https://github.com/llvm/llvm-project/blob/d7a05698efcfa6c596bcaadd8d5154612990f8f3/llvm/include/llvm/ADT/APInt.h#L1115-L1134

For example, if both APInt vars contain a int32_t,
APInt a, b;
Then I think

if (a.getMinSignedBits() + b.getMinSignedBits() > 32)
   a*b must exceeds int32_t <=> overflow happens;

Is my way OK?

Ben Shi

Roman