if (NewPhiSize)
tryRemoveTrivialPhis(ArrayRef<WeakVH>(&InsertedPHIs[NewPhiIndex], NewPhiSize));
- // Now that all fixups are done, rename all uses if we are asked.
- if (RenameUses) {
+ // Now that all fixups are done, rename all uses if we are asked. Skip
+ // renaming for defs in unreachable blocks.
+ BasicBlock *StartBlock = MD->getBlock();
+ if (RenameUses && MSSA->getDomTree().getNode(StartBlock)) {
SmallPtrSet<BasicBlock *, 16> Visited;
- BasicBlock *StartBlock = MD->getBlock();
// We are guaranteed there is a def in the block, because we just got it
// handed to us in this function.
MemoryAccess *FirstDef = &*MSSA->getWritableBlockDefs(StartBlock)->begin();
ret i32 %lv
}
+; Test case for PR48616.
+define void @rename_unreachable_block(i1 %c) personality i32 (...)* undef {
+; CHECK-LABEL: @rename_unreachable_block(
+; CHECK-NEXT: ret void
+; CHECK: bb1:
+; CHECK-NEXT: [[LP:%.*]] = landingpad { i8*, i32 }
+; CHECK-NEXT: cleanup
+; CHECK-NEXT: ret void
+; CHECK: bb2:
+; CHECK-NEXT: invoke void @f()
+; CHECK-NEXT: to label [[BB4:%.*]] unwind label [[BB1:%.*]]
+; CHECK: bb4:
+; CHECK-NEXT: unreachable
+;
+ ret void
+
+bb1:
+ %lp = landingpad { i8*, i32 }
+ cleanup
+ ret void
+
+bb2:
+ br i1 %c, label %bb3, label %bb3
+
+bb3:
+ invoke void @f()
+ to label %bb4 unwind label %bb1
+
+bb4:
+ unreachable
+}
+
declare void @f()
declare void @llvm.assume(i1 noundef) #0