mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 10:42:39 +01:00
[IPT] Don't use OrderedInstructions (NFC)
Use Instruction::comesBefore() instead of OrderedInstructions inside InstructionPrecedenceTracking. This also removes the dominator tree dependency. Differential Revision: https://reviews.llvm.org/D78461
This commit is contained in:
parent
f1caded05f
commit
4f91b71a8c
@ -20,18 +20,18 @@
|
||||
#ifndef LLVM_ANALYSIS_INSTRUCTIONPRECEDENCETRACKING_H
|
||||
#define LLVM_ANALYSIS_INSTRUCTIONPRECEDENCETRACKING_H
|
||||
|
||||
#include "llvm/IR/Dominators.h"
|
||||
#include "llvm/Analysis/OrderedInstructions.h"
|
||||
#include "llvm/ADT/DenseMap.h"
|
||||
|
||||
namespace llvm {
|
||||
|
||||
class BasicBlock;
|
||||
class Instruction;
|
||||
|
||||
class InstructionPrecedenceTracking {
|
||||
// Maps a block to the topmost special instruction in it. If the value is
|
||||
// nullptr, it means that it is known that this block does not contain any
|
||||
// special instructions.
|
||||
DenseMap<const BasicBlock *, const Instruction *> FirstSpecialInsts;
|
||||
// Allows to answer queries about precedence of instructions within one block.
|
||||
OrderedInstructions OI;
|
||||
|
||||
// Fills information about the given block's special instructions.
|
||||
void fill(const BasicBlock *BB);
|
||||
@ -49,9 +49,6 @@ class InstructionPrecedenceTracking {
|
||||
#endif
|
||||
|
||||
protected:
|
||||
InstructionPrecedenceTracking(DominatorTree *DT)
|
||||
: OI(OrderedInstructions(DT)) {}
|
||||
|
||||
/// Returns the topmost special instruction from the block \p BB. Returns
|
||||
/// nullptr if there is no special instructions in the block.
|
||||
const Instruction *getFirstSpecialInstruction(const BasicBlock *BB);
|
||||
@ -96,9 +93,6 @@ public:
|
||||
/// perform PRE moving non-speculable instruction to other place.
|
||||
class ImplicitControlFlowTracking : public InstructionPrecedenceTracking {
|
||||
public:
|
||||
ImplicitControlFlowTracking(DominatorTree *DT)
|
||||
: InstructionPrecedenceTracking(DT) {}
|
||||
|
||||
/// Returns the topmost instruction with implicit control flow from the given
|
||||
/// basic block. Returns nullptr if there is no such instructions in the block.
|
||||
const Instruction *getFirstICFI(const BasicBlock *BB) {
|
||||
@ -121,8 +115,6 @@ public:
|
||||
|
||||
class MemoryWriteTracking : public InstructionPrecedenceTracking {
|
||||
public:
|
||||
MemoryWriteTracking(DominatorTree *DT) : InstructionPrecedenceTracking(DT) {}
|
||||
|
||||
/// Returns the topmost instruction that may write memory from the given
|
||||
/// basic block. Returns nullptr if there is no such instructions in the block.
|
||||
const Instruction *getFirstMemoryWrite(const BasicBlock *BB) {
|
||||
|
@ -122,8 +122,6 @@ public:
|
||||
const DominatorTree *DT,
|
||||
const Loop *CurLoop) const;
|
||||
|
||||
SimpleLoopSafetyInfo() : LoopSafetyInfo() {};
|
||||
|
||||
virtual ~SimpleLoopSafetyInfo() {};
|
||||
};
|
||||
|
||||
@ -171,8 +169,6 @@ public:
|
||||
/// this removal.
|
||||
void removeInstruction(const Instruction *Inst);
|
||||
|
||||
ICFLoopSafetyInfo(DominatorTree *DT) : LoopSafetyInfo(), ICF(DT), MW(DT) {};
|
||||
|
||||
virtual ~ICFLoopSafetyInfo() {};
|
||||
};
|
||||
|
||||
|
@ -59,7 +59,7 @@ bool InstructionPrecedenceTracking::isPreceededBySpecialInstruction(
|
||||
const Instruction *Insn) {
|
||||
const Instruction *MaybeFirstSpecial =
|
||||
getFirstSpecialInstruction(Insn->getParent());
|
||||
return MaybeFirstSpecial && OI.dominates(MaybeFirstSpecial, Insn);
|
||||
return MaybeFirstSpecial && MaybeFirstSpecial->comesBefore(Insn);
|
||||
}
|
||||
|
||||
void InstructionPrecedenceTracking::fill(const BasicBlock *BB) {
|
||||
|
@ -2145,7 +2145,7 @@ bool GVN::runImpl(Function &F, AssumptionCache &RunAC, DominatorTree &RunDT,
|
||||
TLI = &RunTLI;
|
||||
VN.setAliasAnalysis(&RunAA);
|
||||
MD = RunMD;
|
||||
ImplicitControlFlowTracking ImplicitCFT(DT);
|
||||
ImplicitControlFlowTracking ImplicitCFT;
|
||||
ICF = &ImplicitCFT;
|
||||
this->LI = LI;
|
||||
VN.setMemDep(MD);
|
||||
|
@ -331,7 +331,7 @@ bool LoopInvariantCodeMotion::runOnLoop(
|
||||
BasicBlock *Preheader = L->getLoopPreheader();
|
||||
|
||||
// Compute loop safety information.
|
||||
ICFLoopSafetyInfo SafetyInfo(DT);
|
||||
ICFLoopSafetyInfo SafetyInfo;
|
||||
SafetyInfo.computeLoopSafetyInfo(L);
|
||||
|
||||
// We want to visit all of the instructions in this loop... that are not parts
|
||||
|
Loading…
Reference in New Issue
Block a user