llvm-project/llvm/lib/Transforms
Max Kazantsev 0aaf8c16ac [IRCE] Fix buggy behavior in Clamp
Clamp function was too optimistic when choosing signed or unsigned min/max function for calculations.
In fact, `!IsSignedPredicate` guarantees us that `Smallest` and `Greatest` can be compared safely using unsigned
predicates, but we did not check this for `S` which can in theory be negative.

This patch makes Clamp use signed min/max for cases when it fails to prove `S` being non-negative,
and it adds a test where such situation may lead to incorrect conditions calculation.

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

llvm-svn: 311205
2017-08-18 22:50:29 +00:00
..
Coroutines Remove `inline` keyword from inline `classof` methods 2017-06-29 19:35:17 +00:00
Hello Add auto-exporting of symbols from tools so that plugins work on Windows 2016-05-26 11:16:43 +00:00
IPO Add strictfp attribute to prevent unwanted optimizations of libm calls 2017-08-14 21:15:13 +00:00
InstCombine [InstCombine] Teach canEvaluateTruncated to handle arithmetic shift (including those with vector splat shift amount) 2017-08-16 22:42:38 +00:00
Instrumentation [PGO] Fixed assertion due to mismatched memcpy size type. 2017-08-18 19:17:08 +00:00
ObjCARC Sort the remaining #include lines in include/... and lib/.... 2017-06-06 11:49:48 +00:00
Scalar [IRCE] Fix buggy behavior in Clamp 2017-08-18 22:50:29 +00:00
Utils [Dominators] Teach LoopUnswitch to use the incremental API 2017-08-17 16:45:35 +00:00
Vectorize [LV] Using VPlan to model the vectorized code and drive its transformation 2017-08-17 09:29:59 +00:00
CMakeLists.txt [coroutines] Part 3 of N: Adding Boilerplate for Coroutine Passes 2016-07-28 21:04:31 +00:00
LLVMBuild.txt [coroutines] Part 3 of N: Adding Boilerplate for Coroutine Passes 2016-07-28 21:04:31 +00:00