Skip to content

Commit 13a0295

Browse files
committed
[DirectX] fix crash in passes when building with LLVM_ENABLE_EXPENSIVE_CHECKS
fixes #148681 For the scalarizer pass we just need to indicate that scalarization took place, I used the logic for knowing when to eraseFromParent to indicate this. For the DXILLegalizePass and DXILResourceAccess.cpp preserve all seems to be the wrong behavior so stopped doing that.
1 parent 9cb5c00 commit 13a0295

File tree

3 files changed

+17
-13
lines changed

3 files changed

+17
-13
lines changed

llvm/lib/Target/DirectX/DXILLegalizePass.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -629,7 +629,6 @@ class DXILLegalizationPipeline {
629629

630630
for (auto *Inst : reverse(ToRemove))
631631
Inst->eraseFromParent();
632-
633632
MadeChange |= !ToRemove.empty();
634633
}
635634
return MadeChange;
@@ -676,16 +675,16 @@ class DXILLegalizeLegacy : public FunctionPass {
676675
PreservedAnalyses DXILLegalizePass::run(Function &F,
677676
FunctionAnalysisManager &FAM) {
678677
DXILLegalizationPipeline DXLegalize;
679-
bool MadeChanges = DXLegalize.runLegalizationPipeline(F);
680-
if (!MadeChanges)
681-
return PreservedAnalyses::all();
682-
PreservedAnalyses PA;
683-
return PA;
678+
DXLegalize.runLegalizationPipeline(F);
679+
// Note: Nothing seems to need Legalization to preserve analysis.
680+
// Simplest fix was to not preserve analysis.
681+
return PreservedAnalyses::none();
684682
}
685683

686684
bool DXILLegalizeLegacy::runOnFunction(Function &F) {
687685
DXILLegalizationPipeline DXLegalize;
688-
return DXLegalize.runLegalizationPipeline(F);
686+
DXLegalize.runLegalizationPipeline(F);
687+
return true;
689688
}
690689

691690
char DXILLegalizeLegacy::ID = 0;

llvm/lib/Target/DirectX/DXILResourceAccess.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -264,10 +264,10 @@ PreservedAnalyses DXILResourceAccess::run(Function &F,
264264
MAMProxy.getCachedResult<DXILResourceTypeAnalysis>(*F.getParent());
265265
assert(DRTM && "DXILResourceTypeAnalysis must be available");
266266

267-
bool MadeChanges = transformResourcePointers(F, *DRTM);
268-
if (!MadeChanges)
269-
return PreservedAnalyses::all();
267+
transformResourcePointers(F, *DRTM);
270268

269+
// Note: Regardless of transformation only preserve
270+
// DXILResourceTypeAnalysis and DominatorTreeAnalysis.
271271
PreservedAnalyses PA;
272272
PA.preserve<DXILResourceTypeAnalysis>();
273273
PA.preserve<DominatorTreeAnalysis>();
@@ -281,7 +281,10 @@ class DXILResourceAccessLegacy : public FunctionPass {
281281
DXILResourceTypeMap &DRTM =
282282
getAnalysis<DXILResourceTypeWrapperPass>().getResourceTypeMap();
283283

284-
return transformResourcePointers(F, DRTM);
284+
transformResourcePointers(F, DRTM);
285+
// Note: Always returning true ensures the pass manager knows
286+
// we've potentially modified the IR
287+
return true;
285288
}
286289
StringRef getPassName() const override { return "DXIL Resource Access"; }
287290
DXILResourceAccessLegacy() : FunctionPass(ID) {}

llvm/lib/Transforms/Scalar/Scalarizer.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -458,8 +458,11 @@ bool ScalarizerVisitor::visit(Function &F) {
458458
Instruction *I = &*II;
459459
bool Done = InstVisitor::visit(I);
460460
++II;
461-
if (Done && I->getType()->isVoidTy())
461+
if (Done && I->getType()->isVoidTy()) {
462462
I->eraseFromParent();
463+
// Explicitly mark that we've modified the IR
464+
Scalarized = true;
465+
}
463466
}
464467
}
465468
return finish();
@@ -1334,7 +1337,6 @@ bool ScalarizerVisitor::finish() {
13341337
Scalarized = false;
13351338

13361339
RecursivelyDeleteTriviallyDeadInstructionsPermissive(PotentiallyDeadInstrs);
1337-
13381340
return true;
13391341
}
13401342

0 commit comments

Comments
 (0)