summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis/Analysis.cpp
diff options
context:
space:
mode:
authorMax Kazantsev <max.kazantsev@azul.com>2017-10-31 05:07:56 +0000
committerMax Kazantsev <max.kazantsev@azul.com>2017-10-31 05:07:56 +0000
commit488ec975bb418cc3fd230a9acdfdb1effc61670e (patch)
tree19232c65efdc198fc14d64e2f2728f5826a2bf10 /llvm/lib/Analysis/Analysis.cpp
parent39a8dbff8760adfa55942c61d6e75dd432d30875 (diff)
downloadbcm5719-llvm-488ec975bb418cc3fd230a9acdfdb1effc61670e.tar.gz
bcm5719-llvm-488ec975bb418cc3fd230a9acdfdb1effc61670e.zip
Reapply "[GVN] Prevent LoadPRE from hoisting across instructions that don't pass control flow to successors"
This patch fixes the miscompile that happens when PRE hoists loads across guards and other instructions that don't always pass control flow to their successors. PRE is now prohibited to hoist across such instructions because there is no guarantee that the load standing after such instruction is still valid before such instruction. For example, a load from under a guard may be invalid before the guard in the following case: int array[LEN]; ... guard(0 <= index && index < LEN); use(array[index]); Differential Revision: https://reviews.llvm.org/D37460 llvm-svn: 316975
Diffstat (limited to 'llvm/lib/Analysis/Analysis.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud