@@ -14,21 +14,19 @@ See LICENSE.TXT for details.
14
14
============================= end_copyright_notice ===========================*/
15
15
16
16
#pragma once
17
- #include " Compiler/CISACodeGen/WIAnalysis.hpp"
18
17
#include " common/LLVMWarningsPush.hpp"
19
18
#include < llvm/Analysis/PostDominators.h>
20
19
#include < llvm/Analysis/LoopInfo.h>
21
20
#include " common/LLVMWarningsPop.hpp"
22
21
23
22
namespace IGC {
24
23
24
+ #define CODE_SINKING_MIN_SIZE 32
25
+
25
26
class CodeSinking : public llvm ::FunctionPass {
26
27
llvm::DominatorTree* DT;
27
28
llvm::PostDominatorTree* PDT;
28
29
llvm::LoopInfo* LI;
29
- llvm::AliasAnalysis* AA;
30
- WIAnalysis* WI;
31
-
32
30
const llvm::DataLayout* DL; // to estimate register pressure
33
31
CodeGenContext* CTX;
34
32
public:
@@ -40,19 +38,13 @@ namespace IGC {
40
38
41
39
virtual void getAnalysisUsage (llvm::AnalysisUsage& AU) const override {
42
40
AU.setPreservesCFG ();
43
-
44
41
AU.addRequired <llvm::DominatorTreeWrapperPass>();
45
42
AU.addRequired <llvm::PostDominatorTreeWrapperPass>();
46
43
AU.addRequired <llvm::LoopInfoWrapperPass>();
47
- AU.addRequired <llvm::AAResultsWrapperPass>();
48
- AU.addRequired <WIAnalysis>();
49
44
AU.addRequired <CodeGenContextWrapper>();
50
-
51
45
AU.addPreserved <llvm::DominatorTreeWrapperPass>();
52
46
AU.addPreserved <llvm::PostDominatorTreeWrapperPass>();
53
47
AU.addPreserved <llvm::LoopInfoWrapperPass>();
54
- AU.addPreserved <llvm::AAResultsWrapperPass>();
55
- AU.addPreservedID (WIAnalysis::ID);
56
48
}
57
49
private:
58
50
bool ProcessBlock (llvm::BasicBlock& blk);
@@ -69,14 +61,12 @@ namespace IGC {
69
61
bool isSafeToMove (llvm::Instruction* inst,
70
62
bool & reducePressure, bool & hasAliasConcern,
71
63
llvm::SmallPtrSetImpl<llvm::Instruction*>& Stores);
72
- bool isSafeToLoopSinkLoad (llvm::Instruction* I, llvm::Loop* Loop, llvm::AliasAnalysis* AA);
73
- bool isAlwaysSinkInstruction (llvm::Instruction* I);
74
64
75
65
// / local processing
76
66
bool LocalSink (llvm::BasicBlock* blk);
77
67
// / data members for local-sinking
78
- llvm::SmallPtrSet<llvm::BasicBlock*, 8 > LocalBlkSet ;
79
- llvm::SmallPtrSet<llvm::Instruction*, 8 > LocalInstSet ;
68
+ llvm::SmallPtrSet<llvm::BasicBlock*, 8 > localBlkSet ;
69
+ llvm::SmallPtrSet<llvm::Instruction*, 8 > localInstSet ;
80
70
// / data members for undo
81
71
std::vector<llvm::Instruction*> movedInsts;
82
72
std::vector<llvm::Instruction*> undoLocas;
@@ -98,12 +88,6 @@ namespace IGC {
98
88
typedef std::pair<llvm::Instruction*, llvm::Instruction*> InstPair;
99
89
typedef smallvector<llvm::Instruction*, 4 > InstVec;
100
90
101
- // memoize all possible stores for every loop that is a candidate for sinking
102
- typedef llvm::SmallVector<llvm::Instruction*, 32 > StoresVec;
103
- llvm::DenseMap<llvm::Loop*, StoresVec> MemoizedStoresInLoops;
104
- llvm::SmallPtrSet<llvm::Loop*, 8 > BlacklistedLoops;
105
- const StoresVec getAllStoresInLoop (llvm::Loop* L);
106
-
107
91
void appendIfNotExist (InstPair src, std::vector<InstPair> &instMap)
108
92
{
109
93
if (std::find (instMap.begin (), instMap.end (), src) == instMap.end ())
@@ -139,14 +123,12 @@ namespace IGC {
139
123
bool hoistCongruentPhi (llvm::Function& F);
140
124
141
125
llvm::Loop* findLoopAsPreheader (llvm::BasicBlock& blk);
142
- // move LI back into loop
143
- bool loopSink (llvm::Loop* LoopWithPressure);
126
+ // move LI back into loops
127
+ bool loopSink (llvm::Loop* LoopWithPressure, bool SinkMultipleLevel );
144
128
// pre-condition to sink an instruction into a loop
145
- bool isLoopSinkCandidate (llvm::Instruction* I, llvm::Loop* L);
146
- bool loopSinkInstructions (
147
- llvm::SmallVector<llvm::Instruction*, 64 >& SinkCandidates,
148
- llvm::SmallPtrSet<llvm::Instruction*, 32 >& LoadChains,
149
- llvm::Loop* L);
129
+ bool canLoopSink (llvm::Instruction* I, llvm::Loop* L);
130
+ bool LoopSinkInstructions (
131
+ llvm::SmallVector<llvm::Instruction*, 64 > sinkCandidates, llvm::Loop* L);
150
132
151
133
// Move referencing DbgValueInst intrinsics calls after defining instructions
152
134
void ProcessDbgValueInst (llvm::BasicBlock& blk);
0 commit comments