forked from OSchip/llvm-project
4a04fb9e90
ValueTracking is used for more thorough analysis of operands. Based on the analysis, either run-time checks can be simplified (e.g. check only one operand instead of two) or the transformation can be avoided. For example, it is quite often the case that a divisor is promoted from a shorter type and run-time checks for it are redundant. With additional compile-time analysis of values, two special cases naturally arise and are addressed by the patch: 1) Both operands are known to be short enough. Then, the long division can be simply replaced with a short one without CFG modification. 2) If a division is unsigned and the dividend is known to be short then the long division is not needed at all. Because if the divisor is too big for short division then the quotient is obviously zero (and the remainder is equal to the dividend). Actually, the division is not needed when (divisor > dividend). Differential Revision: https://reviews.llvm.org/D29897 llvm-svn: 296832 |
||
---|---|---|
.. | ||
bypass-slow-div-constant-numerator.ll | ||
bypass-slow-div-not-exact.ll | ||
bypass-slow-div-special-cases.ll | ||
bypass-slow-div.ll | ||
dont-sink-nop-addrspacecast.ll | ||
lit.local.cfg |