[ConstantRange] Add fast signed multiply
authorNikita Popov <nikita.ppv@gmail.com>
Sat, 16 Oct 2021 19:02:04 +0000 (21:02 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Sun, 17 Oct 2021 14:41:49 +0000 (16:41 +0200)
commit274b2439f8392796e04e366ce5ff47434bd077e1
tree25777a8a6bd5cad799642c036ce758d297305b63
parent91373bf12ec66591addf56b9f447ec9befd6ddae
[ConstantRange] Add fast signed multiply

The multiply() implementation is very slow -- it performs six
multiplications in double the bitwidth, which means that it will
typically work on allocated APInts and bypass fast-path
implementations. Add an additional implementation that doesn't
try to produce anything better than a full range if overflow is
possible. At least for the BasicAA use-case, we really don't care
about more precise modeling of overflow behavior. The current
use of multiply() is fine while the implementation is limited to
a single index, but extending it to the multiple-index case makes
the compile-time impact untenable.
llvm/include/llvm/IR/ConstantRange.h
llvm/lib/Analysis/BasicAliasAnalysis.cpp
llvm/lib/IR/ConstantRange.cpp
llvm/unittests/IR/ConstantRangeTest.cpp