diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2016-06-12 02:11:20 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2016-06-12 02:11:20 +0000 |
commit | 9f8031c2daa00fdc8a2085f0d111c4afc3bf8938 (patch) | |
tree | 6f07d79e8e7fd18ad38488cc46a90889f405f31b /llvm/lib/Transforms/Scalar/MergedLoadStoreMotion.cpp | |
parent | b7713e413b447f33a332a4d777ba5dbe430e65d0 (diff) | |
download | bcm5719-llvm-9f8031c2daa00fdc8a2085f0d111c4afc3bf8938.tar.gz bcm5719-llvm-9f8031c2daa00fdc8a2085f0d111c4afc3bf8938.zip |
[MergedLoadStoreMotion] Use correct helper for load hoist safety.
It isn't legal to hoist a load past a call which might not return;
even if it doesn't throw, it could, for example, call exit().
Fixes http://llvm.org/PR27953.
llvm-svn: 272495
Diffstat (limited to 'llvm/lib/Transforms/Scalar/MergedLoadStoreMotion.cpp')
-rw-r--r-- | llvm/lib/Transforms/Scalar/MergedLoadStoreMotion.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Scalar/MergedLoadStoreMotion.cpp b/llvm/lib/Transforms/Scalar/MergedLoadStoreMotion.cpp index e300c9f65d9..6010c80cd93 100644 --- a/llvm/lib/Transforms/Scalar/MergedLoadStoreMotion.cpp +++ b/llvm/lib/Transforms/Scalar/MergedLoadStoreMotion.cpp @@ -79,6 +79,7 @@ #include "llvm/Analysis/Loads.h" #include "llvm/Analysis/MemoryBuiltins.h" #include "llvm/Analysis/MemoryDependenceAnalysis.h" +#include "llvm/Analysis/ValueTracking.h" #include "llvm/IR/Metadata.h" #include "llvm/IR/PatternMatch.h" #include "llvm/Support/Debug.h" @@ -232,7 +233,7 @@ bool MergedLoadStoreMotion::isLoadHoistBarrierInRange( if (!SafeToLoadUnconditionally) for (const Instruction &Inst : make_range(Start.getIterator(), End.getIterator())) - if (Inst.mayThrow()) + if (!isGuaranteedToTransferExecutionToSuccessor(&Inst)) return true; MemoryLocation Loc = MemoryLocation::get(LI); return AA->canInstructionRangeModRef(Start, End, Loc, MRI_Mod); |