aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/llvm/lib/CodeGen/SwiftErrorValueTracking.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2023-12-18 20:30:12 +0000
committerDimitry Andric <dim@FreeBSD.org>2024-04-19 21:12:03 +0000
commitc9157d925c489f07ba9c0b2ce47e5149b75969a5 (patch)
tree08bc4a3d9cad3f9ebffa558ddf140b9d9257b219 /contrib/llvm-project/llvm/lib/CodeGen/SwiftErrorValueTracking.cpp
parent2a66844f606a35d68ad8a8061f4bea204274b3bc (diff)
Diffstat (limited to 'contrib/llvm-project/llvm/lib/CodeGen/SwiftErrorValueTracking.cpp')
-rw-r--r--contrib/llvm-project/llvm/lib/CodeGen/SwiftErrorValueTracking.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/contrib/llvm-project/llvm/lib/CodeGen/SwiftErrorValueTracking.cpp b/contrib/llvm-project/llvm/lib/CodeGen/SwiftErrorValueTracking.cpp
index 83a7063de112..74a94d6110f4 100644
--- a/contrib/llvm-project/llvm/lib/CodeGen/SwiftErrorValueTracking.cpp
+++ b/contrib/llvm-project/llvm/lib/CodeGen/SwiftErrorValueTracking.cpp
@@ -253,6 +253,25 @@ void SwiftErrorValueTracking::propagateVRegs() {
setCurrentVReg(MBB, SwiftErrorVal, PHIVReg);
}
}
+
+ // Create implicit defs for upward uses from unreachable blocks
+ MachineRegisterInfo &MRI = MF->getRegInfo();
+ for (const auto &Use : VRegUpwardsUse) {
+ const MachineBasicBlock *UseBB = Use.first.first;
+ Register VReg = Use.second;
+ if (!MRI.def_begin(VReg).atEnd())
+ continue;
+
+#ifdef EXPENSIVE_CHECKS
+ assert(std::find(RPOT.begin(), RPOT.end(), UseBB) == RPOT.end() &&
+ "Reachable block has VReg upward use without definition.");
+#endif
+
+ MachineBasicBlock *UseBBMut = MF->getBlockNumbered(UseBB->getNumber());
+
+ BuildMI(*UseBBMut, UseBBMut->getFirstNonPHI(), DebugLoc(),
+ TII->get(TargetOpcode::IMPLICIT_DEF), VReg);
+ }
}
void SwiftErrorValueTracking::preassignVRegs(