12
12
#include " llvm/IR/IRBuilder.h"
13
13
#include " llvm/IR/InstIterator.h"
14
14
#include " llvm/IR/Instruction.h"
15
- #include " llvm/IR/Module.h"
16
15
#include " llvm/Pass.h"
17
16
#include " llvm/Transforms/Utils/BasicBlockUtils.h"
18
17
#include < functional>
21
20
22
21
using namespace llvm ;
23
22
24
- static void removeDeadIntrinsics (Function &F,
25
- SmallVectorImpl<Function *> &ToRemove) {
26
- if (F.isIntrinsic () && F.use_empty ())
27
- ToRemove.push_back (&F);
28
- }
29
-
30
23
static void fixI8TruncUseChain (Instruction &I,
31
24
SmallVectorImpl<Instruction *> &ToRemove,
32
25
DenseMap<Value *, Value *> &ReplacedValues) {
@@ -153,26 +146,11 @@ class DXILLegalizationPipeline {
153
146
public:
154
147
DXILLegalizationPipeline () { initializeLegalizationPipeline (); }
155
148
156
- bool runLegalizationPipeline (Module &M) {
157
- bool Changes = false ;
158
- SmallVector<Function *> ToRemove;
159
- for (auto &F : make_early_inc_range (M.functions ())) {
160
- Changes |= runFunctionLegalizationPipeline (F);
161
- for (auto &LegalizationFn : ModuleLegalizationPipeline)
162
- LegalizationFn (F, ToRemove);
163
- }
164
-
165
- for (Function *F : ToRemove)
166
- F->eraseFromParent ();
167
-
168
- return Changes && !ToRemove.empty ();
169
- }
170
-
171
- bool runFunctionLegalizationPipeline (Function &F) {
149
+ bool runLegalizationPipeline (Function &F) {
172
150
SmallVector<Instruction *> ToRemove;
173
151
DenseMap<Value *, Value *> ReplacedValues;
174
152
for (auto &I : instructions (F)) {
175
- for (auto &LegalizationFn : FunctionLegalizationPipeline )
153
+ for (auto &LegalizationFn : LegalizationPipeline )
176
154
LegalizationFn (I, ToRemove, ReplacedValues);
177
155
}
178
156
@@ -186,40 +164,37 @@ class DXILLegalizationPipeline {
186
164
SmallVector<
187
165
std::function<void (Instruction &, SmallVectorImpl<Instruction *> &,
188
166
DenseMap<Value *, Value *> &)>>
189
- FunctionLegalizationPipeline;
190
- SmallVector<std::function<void (Function &, SmallVectorImpl<Function *> &)>>
191
- ModuleLegalizationPipeline;
167
+ LegalizationPipeline;
192
168
193
169
void initializeLegalizationPipeline () {
194
- FunctionLegalizationPipeline.push_back (fixI8TruncUseChain);
195
- FunctionLegalizationPipeline.push_back (
196
- downcastI64toI32InsertExtractElements);
197
- ModuleLegalizationPipeline.push_back (removeDeadIntrinsics);
170
+ LegalizationPipeline.push_back (fixI8TruncUseChain);
171
+ LegalizationPipeline.push_back (downcastI64toI32InsertExtractElements);
198
172
}
199
173
};
200
174
201
- class DXILLegalizeLegacy : public ModulePass {
175
+ class DXILLegalizeLegacy : public FunctionPass {
202
176
203
177
public:
204
- bool runOnModule (Module &M ) override ;
205
- DXILLegalizeLegacy () : ModulePass (ID) {}
178
+ bool runOnFunction (Function &F ) override ;
179
+ DXILLegalizeLegacy () : FunctionPass (ID) {}
206
180
207
181
static char ID; // Pass identification.
208
182
};
209
183
} // namespace
210
184
211
- PreservedAnalyses DXILLegalizePass::run (Module &M, ModuleAnalysisManager &MAM) {
185
+ PreservedAnalyses DXILLegalizePass::run (Function &F,
186
+ FunctionAnalysisManager &FAM) {
212
187
DXILLegalizationPipeline DXLegalize;
213
- bool MadeChanges = DXLegalize.runLegalizationPipeline (M );
188
+ bool MadeChanges = DXLegalize.runLegalizationPipeline (F );
214
189
if (!MadeChanges)
215
190
return PreservedAnalyses::all ();
216
191
PreservedAnalyses PA;
217
192
return PA;
218
193
}
219
194
220
- bool DXILLegalizeLegacy::runOnModule (Module &M ) {
195
+ bool DXILLegalizeLegacy::runOnFunction (Function &F ) {
221
196
DXILLegalizationPipeline DXLegalize;
222
- return DXLegalize.runLegalizationPipeline (M );
197
+ return DXLegalize.runLegalizationPipeline (F );
223
198
}
224
199
225
200
char DXILLegalizeLegacy::ID = 0 ;
@@ -229,6 +204,6 @@ INITIALIZE_PASS_BEGIN(DXILLegalizeLegacy, DEBUG_TYPE, "DXIL Legalizer", false,
229
204
INITIALIZE_PASS_END(DXILLegalizeLegacy, DEBUG_TYPE, " DXIL Legalizer" , false ,
230
205
false )
231
206
232
- ModulePass *llvm::createDXILLegalizeLegacyPass() {
207
+ FunctionPass *llvm::createDXILLegalizeLegacyPass() {
233
208
return new DXILLegalizeLegacy ();
234
209
}
0 commit comments