[ConstantRange] Add abs() support
authorNikita Popov <nikita.ppv@gmail.com>
Fri, 26 Apr 2019 16:50:31 +0000 (16:50 +0000)
committerNikita Popov <nikita.ppv@gmail.com>
Fri, 26 Apr 2019 16:50:31 +0000 (16:50 +0000)
commitc0fa4ec01dd1c3837b31e142ceb20845421e34ab
tree6042ac43d048e3a892c23205d17652c9ef4d025d
parentf30f261dc531b289bc74c157178e5bbc4a6ff7c9
[ConstantRange] Add abs() support

Add support for abs() to ConstantRange. This will allow to handle
SPF_ABS select flavor in LVI and will also come in handy as a
primitive for the srem implementation.

The implementation is slightly tricky, because a) abs of signed min
is signed min and b) sign-wrapped ranges may have an abs() that is
smaller than a full range, so we need to explicitly handle them.

Differential Revision: https://reviews.llvm.org/D61084

llvm-svn: 359321
llvm/include/llvm/IR/ConstantRange.h
llvm/lib/IR/ConstantRange.cpp
llvm/unittests/IR/ConstantRangeTest.cpp