[all-commits] [llvm/llvm-project] 4b6223: [ConstantRange] makeGuaranteedNoWrapRegion(): `shl...
Roman Lebedev via All-commits
all-commits at lists.llvm.org
Sun Oct 20 12:35:34 PDT 2019
Branch: refs/heads/master
Home: https://github.com/llvm/llvm-project
Commit: 4b6223263a3c1fb98bc69e8eb6722d48e4eb9f49
https://github.com/llvm/llvm-project/commit/4b6223263a3c1fb98bc69e8eb6722d48e4eb9f49
Author: Roman Lebedev <lebedev.ri at gmail.com>
Date: 2019-10-20 (Sun, 20 Oct 2019)
Changed paths:
M llvm/lib/IR/ConstantRange.cpp
M llvm/unittests/IR/ConstantRangeTest.cpp
Log Message:
-----------
[ConstantRange] makeGuaranteedNoWrapRegion(): `shl` support
Summary:
If all the shifts amount are already poison-producing,
then we can add more poison-producing flags ontop:
https://rise4fun.com/Alive/Ocwi
Otherwise, we should only consider the possible range of shift amts that don't result in poison.
For unsigned range not not overflow, we must not shift out any set bits,
and the actual limit for `x` can be computed by backtransforming
the maximal value we could ever get out of the `shl` - `-1` through
`lshr`. If the `x` is any larger than that then it will overflow.
Likewise for signed range, but just in signed domain..
This is based on the general idea outlined by @nikic in https://reviews.llvm.org/D68672#1714990
Reviewers: nikic, sanjoy
Reviewed By: nikic
Subscribers: hiraditya, llvm-commits, nikic
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D69217
llvm-svn: 375370
More information about the All-commits
mailing list