mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-07 14:33:15 +00:00
Fix for regression: [Bug 20369] wrong code at -O3 on x86_64-linux-gnu in 64-bit mode
Prevents hoisting of loads above stores and sinking of stores below loads in MergedLoadStoreMotion.cpp (rdar://15991737) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213497 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d4542a8cdc
commit
10437f66fa
@ -243,6 +243,10 @@ bool MergedLoadStoreMotion::isLoadHoistBarrier(Instruction *Inst) {
|
||||
return true;
|
||||
if (isa<TerminatorInst>(Inst))
|
||||
return true;
|
||||
// FIXME: Conservatively let a store instruction block the load.
|
||||
// Use alias analysis instead.
|
||||
if (isa<StoreInst>(Inst))
|
||||
return true;
|
||||
// Note: mayHaveSideEffects covers all instructions that could
|
||||
// trigger a change to state. Eg. in-flight stores have to be executed
|
||||
// before ordered loads or fences, calls could invoke functions that store
|
||||
@ -413,6 +417,10 @@ bool MergedLoadStoreMotion::mergeLoads(BasicBlock *BB) {
|
||||
/// \brief True when instruction is sink barrier for a store
|
||||
///
|
||||
bool MergedLoadStoreMotion::isStoreSinkBarrier(Instruction *Inst) {
|
||||
// FIXME: Conservatively let a load instruction block the store.
|
||||
// Use alias analysis instead.
|
||||
if (isa<LoadInst>(Inst))
|
||||
return true;
|
||||
if (isa<CallInst>(Inst))
|
||||
return true;
|
||||
if (isa<TerminatorInst>(Inst) && !isa<BranchInst>(Inst))
|
||||
|
Loading…
x
Reference in New Issue
Block a user