Skip to content

Commit 82cac25

Browse files
committed
revert changes to LegalizerPass, instead do cleanup in DXILFinalizeLinkage.cpp where intrinsics are getting orphaned
1 parent c80789d commit 82cac25

File tree

5 files changed

+27
-44
lines changed

5 files changed

+27
-44
lines changed

llvm/lib/Target/DirectX/DXILFinalizeLinkage.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,15 @@
1818
using namespace llvm;
1919

2020
static bool finalizeLinkage(Module &M) {
21-
SmallPtrSet<Function *, 8> Funcs;
21+
SmallVector<Function *> Funcs;
2222

2323
// Collect non-entry and non-exported functions to set to internal linkage.
2424
for (Function &EF : M.functions()) {
2525
if (EF.isIntrinsic())
2626
continue;
2727
if (EF.hasFnAttribute("hlsl.shader") || EF.hasFnAttribute("hlsl.export"))
2828
continue;
29-
Funcs.insert(&EF);
29+
Funcs.push_back(&EF);
3030
}
3131

3232
for (Function *F : Funcs) {
@@ -36,6 +36,14 @@ static bool finalizeLinkage(Module &M) {
3636
M.getFunctionList().erase(F);
3737
}
3838

39+
// Do a pass over intrinsics that are no longer used and remove them.
40+
Funcs.clear();
41+
for (Function &F : M.functions())
42+
if (F.isIntrinsic() && F.use_empty())
43+
Funcs.push_back(&F);
44+
for (Function *F : Funcs)
45+
F->eraseFromParent();
46+
3947
return false;
4048
}
4149

llvm/lib/Target/DirectX/DXILLegalizePass.cpp

Lines changed: 14 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
#include "llvm/IR/IRBuilder.h"
1313
#include "llvm/IR/InstIterator.h"
1414
#include "llvm/IR/Instruction.h"
15-
#include "llvm/IR/Module.h"
1615
#include "llvm/Pass.h"
1716
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
1817
#include <functional>
@@ -21,12 +20,6 @@
2120

2221
using namespace llvm;
2322

24-
static void removeDeadIntrinsics(Function &F,
25-
SmallVectorImpl<Function *> &ToRemove) {
26-
if (F.isIntrinsic() && F.use_empty())
27-
ToRemove.push_back(&F);
28-
}
29-
3023
static void fixI8TruncUseChain(Instruction &I,
3124
SmallVectorImpl<Instruction *> &ToRemove,
3225
DenseMap<Value *, Value *> &ReplacedValues) {
@@ -153,26 +146,11 @@ class DXILLegalizationPipeline {
153146
public:
154147
DXILLegalizationPipeline() { initializeLegalizationPipeline(); }
155148

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) {
172150
SmallVector<Instruction *> ToRemove;
173151
DenseMap<Value *, Value *> ReplacedValues;
174152
for (auto &I : instructions(F)) {
175-
for (auto &LegalizationFn : FunctionLegalizationPipeline)
153+
for (auto &LegalizationFn : LegalizationPipeline)
176154
LegalizationFn(I, ToRemove, ReplacedValues);
177155
}
178156

@@ -186,40 +164,37 @@ class DXILLegalizationPipeline {
186164
SmallVector<
187165
std::function<void(Instruction &, SmallVectorImpl<Instruction *> &,
188166
DenseMap<Value *, Value *> &)>>
189-
FunctionLegalizationPipeline;
190-
SmallVector<std::function<void(Function &, SmallVectorImpl<Function *> &)>>
191-
ModuleLegalizationPipeline;
167+
LegalizationPipeline;
192168

193169
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);
198172
}
199173
};
200174

201-
class DXILLegalizeLegacy : public ModulePass {
175+
class DXILLegalizeLegacy : public FunctionPass {
202176

203177
public:
204-
bool runOnModule(Module &M) override;
205-
DXILLegalizeLegacy() : ModulePass(ID) {}
178+
bool runOnFunction(Function &F) override;
179+
DXILLegalizeLegacy() : FunctionPass(ID) {}
206180

207181
static char ID; // Pass identification.
208182
};
209183
} // namespace
210184

211-
PreservedAnalyses DXILLegalizePass::run(Module &M, ModuleAnalysisManager &MAM) {
185+
PreservedAnalyses DXILLegalizePass::run(Function &F,
186+
FunctionAnalysisManager &FAM) {
212187
DXILLegalizationPipeline DXLegalize;
213-
bool MadeChanges = DXLegalize.runLegalizationPipeline(M);
188+
bool MadeChanges = DXLegalize.runLegalizationPipeline(F);
214189
if (!MadeChanges)
215190
return PreservedAnalyses::all();
216191
PreservedAnalyses PA;
217192
return PA;
218193
}
219194

220-
bool DXILLegalizeLegacy::runOnModule(Module &M) {
195+
bool DXILLegalizeLegacy::runOnFunction(Function &F) {
221196
DXILLegalizationPipeline DXLegalize;
222-
return DXLegalize.runLegalizationPipeline(M);
197+
return DXLegalize.runLegalizationPipeline(F);
223198
}
224199

225200
char DXILLegalizeLegacy::ID = 0;
@@ -229,6 +204,6 @@ INITIALIZE_PASS_BEGIN(DXILLegalizeLegacy, DEBUG_TYPE, "DXIL Legalizer", false,
229204
INITIALIZE_PASS_END(DXILLegalizeLegacy, DEBUG_TYPE, "DXIL Legalizer", false,
230205
false)
231206

232-
ModulePass *llvm::createDXILLegalizeLegacyPass() {
207+
FunctionPass *llvm::createDXILLegalizeLegacyPass() {
233208
return new DXILLegalizeLegacy();
234209
}

llvm/lib/Target/DirectX/DXILLegalizePass.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ namespace llvm {
1515

1616
class DXILLegalizePass : public PassInfoMixin<DXILLegalizePass> {
1717
public:
18-
PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM);
18+
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM);
1919
};
2020
} // namespace llvm
2121

llvm/lib/Target/DirectX/DirectX.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ void initializeDXILLegalizeLegacyPass(PassRegistry &);
5252

5353
/// Pass to Legalize DXIL by remove i8 truncations and i64 insert/extract
5454
/// elements
55-
ModulePass *createDXILLegalizeLegacyPass();
55+
FunctionPass *createDXILLegalizeLegacyPass();
5656

5757
/// Initializer for DXILOpLowering
5858
void initializeDXILOpLoweringLegacyPass(PassRegistry &);

llvm/lib/Target/DirectX/DirectXPassRegistry.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ MODULE_ANALYSIS("dxil-root-signature-analysis", dxil::RootSignatureAnalysis())
2626
MODULE_PASS("dxil-data-scalarization", DXILDataScalarization())
2727
MODULE_PASS("dxil-flatten-arrays", DXILFlattenArrays())
2828
MODULE_PASS("dxil-intrinsic-expansion", DXILIntrinsicExpansion())
29-
MODULE_PASS("dxil-legalize", DXILLegalizePass())
3029
MODULE_PASS("dxil-op-lower", DXILOpLowering())
3130
MODULE_PASS("dxil-pretty-printer", DXILPrettyPrinterPass(dbgs()))
3231
MODULE_PASS("dxil-translate-metadata", DXILTranslateMetadata())
@@ -39,4 +38,5 @@ MODULE_PASS("print<dxil-root-signature>", dxil::RootSignatureAnalysisPrinter(dbg
3938
#define FUNCTION_PASS(NAME, CREATE_PASS)
4039
#endif
4140
FUNCTION_PASS("dxil-resource-access", DXILResourceAccess())
41+
FUNCTION_PASS("dxil-legalize", DXILLegalizePass())
4242
#undef FUNCTION_PASS

0 commit comments

Comments
 (0)