mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-16 16:37:42 +00:00
Feeding isSafeToSpeculativelyExecute its DataLayout pointer (in Sink)
This is the one remaining place I see where passing isSafeToSpeculativelyExecute a DataLayout pointer might matter (at least for loads) -- I think I got the others in r212720. Most of the other remaining callers of isSafeToSpeculativelyExecute only use it for call sites (or otherwise exclude loads). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212730 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9478f0a6ff
commit
b1beb01d82
@ -18,6 +18,7 @@
|
||||
#include "llvm/Analysis/LoopInfo.h"
|
||||
#include "llvm/Analysis/ValueTracking.h"
|
||||
#include "llvm/IR/CFG.h"
|
||||
#include "llvm/IR/DataLayout.h"
|
||||
#include "llvm/IR/Dominators.h"
|
||||
#include "llvm/IR/IntrinsicInst.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
@ -34,6 +35,7 @@ namespace {
|
||||
DominatorTree *DT;
|
||||
LoopInfo *LI;
|
||||
AliasAnalysis *AA;
|
||||
const DataLayout *DL;
|
||||
|
||||
public:
|
||||
static char ID; // Pass identification
|
||||
@ -98,6 +100,8 @@ bool Sinking::runOnFunction(Function &F) {
|
||||
DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
LI = &getAnalysis<LoopInfo>();
|
||||
AA = &getAnalysis<AliasAnalysis>();
|
||||
DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();
|
||||
DL = DLP ? &DLP->getDataLayout() : nullptr;
|
||||
|
||||
bool MadeChange, EverMadeChange = false;
|
||||
|
||||
@ -193,7 +197,7 @@ bool Sinking::IsAcceptableTarget(Instruction *Inst,
|
||||
if (SuccToSinkTo->getUniquePredecessor() != Inst->getParent()) {
|
||||
// We cannot sink a load across a critical edge - there may be stores in
|
||||
// other code paths.
|
||||
if (!isSafeToSpeculativelyExecute(Inst))
|
||||
if (!isSafeToSpeculativelyExecute(Inst, DL))
|
||||
return false;
|
||||
|
||||
// We don't want to sink across a critical edge if we don't dominate the
|
||||
|
Loading…
Reference in New Issue
Block a user