diff options
author | Aditya Kumar <hiraditya@msn.com> | 2017-05-05 14:49:45 +0000 |
---|---|---|
committer | Aditya Kumar <hiraditya@msn.com> | 2017-05-05 14:49:45 +0000 |
commit | 1c42d135e131d17d2efbf769d61c56d83846e301 (patch) | |
tree | 9f309f66db43e9fed26bbfa30935f11a879279cd /llvm/lib/Transforms | |
parent | e608f6a632447be3d03a32bec6f193d8458f6999 (diff) | |
download | bcm5719-llvm-1c42d135e131d17d2efbf769d61c56d83846e301.tar.gz bcm5719-llvm-1c42d135e131d17d2efbf769d61c56d83846e301.zip |
[LoopIdiom] check for safety while expanding
Loop Idiom recognition was generating memset in a case that
would result generating a division operation to an unsafe location.
Differential Revision: https://reviews.llvm.org/D32674
llvm-svn: 302238
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r-- | llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp b/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp index 410fbb03068..48d5ae88cda 100644 --- a/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp +++ b/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp @@ -783,6 +783,11 @@ bool LoopIdiomRecognize::processLoopStridedStore( if (NegStride) Start = getStartForNegStride(Start, BECount, IntPtr, StoreSize, SE); + // TODO: ideally we should still be able to generate memset if SCEV expander + // is taught to generate the dependencies at the latest point. + if (!isSafeToExpand(Start, *SE)) + return false; + // Okay, we have a strided store "p[i]" of a splattable value. We can turn // this into a memset in the loop preheader now if we want. However, this // would be unsafe to do if there is anything else in the loop that may read @@ -814,6 +819,11 @@ bool LoopIdiomRecognize::processLoopStridedStore( SCEV::FlagNUW); } + // TODO: ideally we should still be able to generate memset if SCEV expander + // is taught to generate the dependencies at the latest point. + if (!isSafeToExpand(NumBytesS, *SE)) + return false; + Value *NumBytes = Expander.expandCodeFor(NumBytesS, IntPtr, Preheader->getTerminator()); |