mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-22 12:33:33 +02:00
Refactor LICM to expose canSinkOrHoistInst to LoopSink pass.
Summary: LoopSink pass shares the same canSinkOrHoistInst functionality with LICM pass. This patch exposes this function in preparation of https://reviews.llvm.org/D22778 Reviewers: chandlerc, davidxl, danielcdh Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D24171 llvm-svn: 280429
This commit is contained in:
parent
0f6a9f5c59
commit
199099787a
@ -21,12 +21,14 @@
|
||||
#include "llvm/IR/IRBuilder.h"
|
||||
|
||||
namespace llvm {
|
||||
class AAResults;
|
||||
class AliasSet;
|
||||
class AliasSetTracker;
|
||||
class AssumptionCache;
|
||||
class BasicBlock;
|
||||
class DataLayout;
|
||||
class DominatorTree;
|
||||
class Instruction;
|
||||
class Loop;
|
||||
class LoopInfo;
|
||||
class Pass;
|
||||
@ -467,6 +469,12 @@ void addStringMetadataToLoop(Loop *TheLoop, const char *MDString,
|
||||
/// All loop passes should call this as part of implementing their \c
|
||||
/// getAnalysisUsage.
|
||||
void getLoopAnalysisUsage(AnalysisUsage &AU);
|
||||
}
|
||||
|
||||
/// canSinkOrHoistInst - Return true if the hoister and sinker can handle this
|
||||
/// instruction. If SafetyInfo is not nullptr, check if the instruction can
|
||||
/// execute speculatively.
|
||||
bool canSinkOrHoistInst(Instruction &I, AAResults *AA, DominatorTree *DT,
|
||||
Loop *CurLoop, AliasSetTracker *CurAST,
|
||||
LoopSafetyInfo *SafetyInfo);
|
||||
}
|
||||
#endif
|
||||
|
@ -100,10 +100,6 @@ static Instruction *
|
||||
CloneInstructionInExitBlock(Instruction &I, BasicBlock &ExitBlock, PHINode &PN,
|
||||
const LoopInfo *LI,
|
||||
const LoopSafetyInfo *SafetyInfo);
|
||||
static bool canSinkOrHoistInst(Instruction &I, AliasAnalysis *AA,
|
||||
DominatorTree *DT,
|
||||
Loop *CurLoop, AliasSetTracker *CurAST,
|
||||
LoopSafetyInfo *SafetyInfo);
|
||||
|
||||
namespace {
|
||||
struct LoopInvariantCodeMotion {
|
||||
@ -439,9 +435,9 @@ void llvm::computeLoopSafetyInfo(LoopSafetyInfo *SafetyInfo, Loop *CurLoop) {
|
||||
/// canSinkOrHoistInst - Return true if the hoister and sinker can handle this
|
||||
/// instruction.
|
||||
///
|
||||
bool canSinkOrHoistInst(Instruction &I, AAResults *AA, DominatorTree *DT,
|
||||
Loop *CurLoop, AliasSetTracker *CurAST,
|
||||
LoopSafetyInfo *SafetyInfo) {
|
||||
bool llvm::canSinkOrHoistInst(Instruction &I, AAResults *AA, DominatorTree *DT,
|
||||
Loop *CurLoop, AliasSetTracker *CurAST,
|
||||
LoopSafetyInfo *SafetyInfo) {
|
||||
if (!isa<LoadInst>(I) && !isa<CallInst>(I) &&
|
||||
!isa<BinaryOperator>(I) && !isa<CastInst>(I) && !isa<SelectInst>(I) &&
|
||||
!isa<GetElementPtrInst>(I) && !isa<CmpInst>(I) &&
|
||||
|
Loading…
Reference in New Issue
Block a user