projects
/
oota-llvm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Revert "[safestack] Fast access to the unsafe stack pointer on AArch64/Android."
[oota-llvm.git]
/
lib
/
CodeGen
/
SpillPlacement.h
diff --git
a/lib/CodeGen/SpillPlacement.h
b/lib/CodeGen/SpillPlacement.h
index fc412f817cdb490545129c4bfd9710558a4b0fd4..03dd58d6e9a978a52f13d03f5eb2112af5b4d36e 100644
(file)
--- a/
lib/CodeGen/SpillPlacement.h
+++ b/
lib/CodeGen/SpillPlacement.h
@@
-24,12
+24,13
@@
//
//===----------------------------------------------------------------------===//
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CODEGEN_SPILLPLACEMENT_H
-#define LLVM_CODEGEN_SPILLPLACEMENT_H
+#ifndef LLVM_
LIB_
CODEGEN_SPILLPLACEMENT_H
+#define LLVM_
LIB_
CODEGEN_SPILLPLACEMENT_H
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
+#include "llvm/Support/BlockFrequency.h"
namespace llvm {
namespace llvm {
@@
-37,12
+38,14
@@
class BitVector;
class EdgeBundles;
class MachineBasicBlock;
class MachineLoopInfo;
class EdgeBundles;
class MachineBasicBlock;
class MachineLoopInfo;
+class MachineBlockFrequencyInfo;
-class SpillPlacement
: public MachineFunctionPass {
+class SpillPlacement : public MachineFunctionPass {
struct Node;
const MachineFunction *MF;
const EdgeBundles *bundles;
const MachineLoopInfo *loops;
struct Node;
const MachineFunction *MF;
const EdgeBundles *bundles;
const MachineLoopInfo *loops;
+ const MachineBlockFrequencyInfo *MBFI;
Node *nodes;
// Nodes that are active in the current computation. Owned by the prepare()
Node *nodes;
// Nodes that are active in the current computation. Owned by the prepare()
@@
-57,13
+60,17
@@
class SpillPlacement : public MachineFunctionPass {
SmallVector<unsigned, 8> RecentPositive;
// Block frequencies are computed once. Indexed by block number.
SmallVector<unsigned, 8> RecentPositive;
// Block frequencies are computed once. Indexed by block number.
- SmallVector<float, 4> BlockFrequency;
+ SmallVector<BlockFrequency, 8> BlockFrequencies;
+
+ /// Decision threshold. A node gets the output value 0 if the weighted sum of
+ /// its inputs falls in the open interval (-Threshold;Threshold).
+ BlockFrequency Threshold;
public:
static char ID; // Pass identification, replacement for typeid.
public:
static char ID; // Pass identification, replacement for typeid.
- SpillPlacement() : MachineFunctionPass(ID), nodes(
0
) {}
- ~SpillPlacement() { releaseMemory(); }
+ SpillPlacement() : MachineFunctionPass(ID), nodes(
nullptr
) {}
+ ~SpillPlacement()
override
{ releaseMemory(); }
/// BorderConstraint - A basic block has separate constraints for entry and
/// exit.
/// BorderConstraint - A basic block has separate constraints for entry and
/// exit.
@@
-139,16
+146,17
@@
public:
/// getBlockFrequency - Return the estimated block execution frequency per
/// function invocation.
/// getBlockFrequency - Return the estimated block execution frequency per
/// function invocation.
-
float
getBlockFrequency(unsigned Number) const {
- return BlockFrequenc
y
[Number];
+
BlockFrequency
getBlockFrequency(unsigned Number) const {
+ return BlockFrequenc
ies
[Number];
}
private:
}
private:
-
virtual bool runOnMachineFunction(MachineFunction&)
;
- v
irtual void getAnalysisUsage(AnalysisUsage&) const
;
- v
irtual void releaseMemory()
;
+
bool runOnMachineFunction(MachineFunction&) override
;
+ v
oid getAnalysisUsage(AnalysisUsage&) const override
;
+ v
oid releaseMemory() override
;
void activate(unsigned);
void activate(unsigned);
+ void setThreshold(const BlockFrequency &Entry);
};
} // end namespace llvm
};
} // end namespace llvm