[llvm-dev] Is there a simple way to check APInt multiplication overflow?

Roman Lebedev via llvm-dev llvm-dev at lists.llvm.org
Sat Jul 11 04:53:51 PDT 2020


On Sat, Jul 11, 2020 at 2:49 PM Ben Shi via llvm-dev
<llvm-dev at lists.llvm.org> wrote:
>
> 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

> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev


More information about the llvm-dev mailing list