aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/MachineVerifier.cpp
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2025-01-10 12:10:45 +0000
committerGitHub <noreply@github.com>2025-01-10 12:10:45 +0000
commit9b49da2b3169544355192dfd8d6909213169d0c1 (patch)
tree794676b337f726c7722377609950b4f1c57ca658 /llvm/lib/CodeGen/MachineVerifier.cpp
parentb53e79422adb83870f44c55d977989da3e5c8c69 (diff)
downloadllvm-9b49da2b3169544355192dfd8d6909213169d0c1.zip
llvm-9b49da2b3169544355192dfd8d6909213169d0c1.tar.gz
llvm-9b49da2b3169544355192dfd8d6909213169d0c1.tar.bz2
Revert 86b1b0671cafd "MachineVerifier: Check stack protector is top-most in frame" (#122444)
Reverts llvm/llvm-project#121481 This is causing build failures on EXPENSIVE_CHECKS builds: https://lab.llvm.org/buildbot/#/builders/187/builds/3653 https://lab.llvm.org/buildbot/#/builders/16/builds/11758
Diffstat (limited to 'llvm/lib/CodeGen/MachineVerifier.cpp')
-rw-r--r--llvm/lib/CodeGen/MachineVerifier.cpp52
1 files changed, 1 insertions, 51 deletions
diff --git a/llvm/lib/CodeGen/MachineVerifier.cpp b/llvm/lib/CodeGen/MachineVerifier.cpp
index 2558799..bec36b7 100644
--- a/llvm/lib/CodeGen/MachineVerifier.cpp
+++ b/llvm/lib/CodeGen/MachineVerifier.cpp
@@ -353,8 +353,6 @@ struct MachineVerifier {
LaneBitmask LaneMask = LaneBitmask::getNone());
void verifyStackFrame();
- // Check that the stack protector is the top-most object in the stack.
- void verifyStackProtector();
void verifySlotIndexes() const;
void verifyProperties(const MachineFunction &MF);
@@ -711,10 +709,8 @@ void MachineVerifier::visitMachineFunctionBefore() {
// Check that the register use lists are sane.
MRI->verifyUseLists();
- if (!MF->empty()) {
+ if (!MF->empty())
verifyStackFrame();
- verifyStackProtector();
- }
}
void
@@ -4042,49 +4038,3 @@ void MachineVerifier::verifyStackFrame() {
}
}
}
-
-void MachineVerifier::verifyStackProtector() {
- const MachineFrameInfo &MFI = MF->getFrameInfo();
- if (!MFI.hasStackProtectorIndex())
- return;
- // Only applicable when the offsets of frame objects have been determined,
- // which is indicated by a non-zero stack size.
- if (!MFI.getStackSize())
- return;
- const TargetFrameLowering &TFI = *MF->getSubtarget().getFrameLowering();
- bool StackGrowsDown =
- TFI.getStackGrowthDirection() == TargetFrameLowering::StackGrowsDown;
- // Collect the frame indices of the callee-saved registers which are spilled
- // to the stack. These are the registers that are stored above the stack
- // protector.
- SmallSet<unsigned, 4> CalleeSavedFrameIndices;
- if (MFI.isCalleeSavedInfoValid()) {
- for (const CalleeSavedInfo &Info : MFI.getCalleeSavedInfo()) {
- if (!Info.isSpilledToReg())
- CalleeSavedFrameIndices.insert(Info.getFrameIdx());
- }
- }
- unsigned FI = MFI.getStackProtectorIndex();
- int64_t SPStart = MFI.getObjectOffset(FI);
- int64_t SPEnd = SPStart + MFI.getObjectSize(FI);
- for (unsigned I = 0, E = MFI.getObjectIndexEnd(); I != E; ++I) {
- if (I == FI)
- continue;
- // Variable-sized objects do not have a fixed offset.
- if (MFI.isVariableSizedObjectIndex(I))
- continue;
- if (CalleeSavedFrameIndices.contains(I))
- continue;
- int64_t ObjStart = MFI.getObjectOffset(I);
- int64_t ObjEnd = ObjStart + MFI.getObjectSize(I);
- if (SPStart < ObjEnd && ObjStart < SPEnd) {
- report("Stack protector overlaps with another stack object", MF);
- break;
- }
- if ((StackGrowsDown && SPStart <= ObjStart) ||
- (!StackGrowsDown && SPStart >= ObjStart)) {
- report("Stack protector is not the top-most object on the stack", MF);
- break;
- }
- }
-}