Skip to content

Commit

Permalink
[IPT] Don't use OrderedInstructions (NFC)
Browse files Browse the repository at this point in the history
Use Instruction::comesBefore() instead of OrderedInstructions
inside InstructionPrecedenceTracking. This also removes the
dominator tree dependency.

Differential Revision: https://reviews.llvm.org/D78461
  • Loading branch information
nikic committed Apr 20, 2020
1 parent 33ad38a commit 54d01cb
Show file tree
Hide file tree
Showing 5 changed files with 7 additions and 19 deletions.
16 changes: 4 additions & 12 deletions llvm/include/llvm/Analysis/InstructionPrecedenceTracking.h
Expand Up @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -96,9 +93,6 @@ class InstructionPrecedenceTracking {
/// 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) {
Expand All @@ -121,8 +115,6 @@ class ImplicitControlFlowTracking : public InstructionPrecedenceTracking {

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) {
Expand Down
4 changes: 0 additions & 4 deletions llvm/include/llvm/Analysis/MustExecute.h
Expand Up @@ -122,8 +122,6 @@ class SimpleLoopSafetyInfo: public LoopSafetyInfo {
const DominatorTree *DT,
const Loop *CurLoop) const;

SimpleLoopSafetyInfo() : LoopSafetyInfo() {};

virtual ~SimpleLoopSafetyInfo() {};
};

Expand Down Expand Up @@ -171,8 +169,6 @@ class ICFLoopSafetyInfo: public LoopSafetyInfo {
/// this removal.
void removeInstruction(const Instruction *Inst);

ICFLoopSafetyInfo(DominatorTree *DT) : LoopSafetyInfo(), ICF(DT), MW(DT) {};

virtual ~ICFLoopSafetyInfo() {};
};

Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Analysis/InstructionPrecedenceTracking.cpp
Expand Up @@ -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) {
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Transforms/Scalar/GVN.cpp
Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Transforms/Scalar/LICM.cpp
Expand Up @@ -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
Expand Down

0 comments on commit 54d01cb

Please sign in to comment.