summaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/MachineVerifier.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/CodeGen/MachineVerifier.cpp')
-rw-r--r--llvm/lib/CodeGen/MachineVerifier.cpp43
1 files changed, 9 insertions, 34 deletions
diff --git a/llvm/lib/CodeGen/MachineVerifier.cpp b/llvm/lib/CodeGen/MachineVerifier.cpp
index 8e64e4055665..bec36b728ae3 100644
--- a/llvm/lib/CodeGen/MachineVerifier.cpp
+++ b/llvm/lib/CodeGen/MachineVerifier.cpp
@@ -369,7 +369,7 @@ struct MachineVerifierLegacyPass : public MachineFunctionPass {
}
void getAnalysisUsage(AnalysisUsage &AU) const override {
- AU.addUsedIfAvailable<LiveStacks>();
+ AU.addUsedIfAvailable<LiveStacksWrapperLegacy>();
AU.addUsedIfAvailable<LiveVariablesWrapperPass>();
AU.addUsedIfAvailable<SlotIndexesWrapperPass>();
AU.addUsedIfAvailable<LiveIntervalsWrapperPass>();
@@ -491,7 +491,8 @@ bool MachineVerifier::verify(const MachineFunction &MF) {
auto *LVWrapper = PASS->getAnalysisIfAvailable<LiveVariablesWrapperPass>();
if (!LiveInts)
LiveVars = LVWrapper ? &LVWrapper->getLV() : nullptr;
- LiveStks = PASS->getAnalysisIfAvailable<LiveStacks>();
+ auto *LSWrapper = PASS->getAnalysisIfAvailable<LiveStacksWrapperLegacy>();
+ LiveStks = LSWrapper ? &LSWrapper->getLS() : nullptr;
auto *SIWrapper = PASS->getAnalysisIfAvailable<SlotIndexesWrapperPass>();
Indexes = SIWrapper ? &SIWrapper->getSI() : nullptr;
}
@@ -1585,38 +1586,12 @@ void MachineVerifier::verifyPreISelGenericInstruction(const MachineInstr *MI) {
break;
}
- case TargetOpcode::G_ABDS:
- case TargetOpcode::G_ABDU: {
- LLT DstTy = MRI->getType(MI->getOperand(0).getReg());
- LLT SrcTy = MRI->getType(MI->getOperand(1).getReg());
- LLT SrcTy2 = MRI->getType(MI->getOperand(2).getReg());
-
- if ((DstTy.isVector() != SrcTy.isVector()) ||
- (DstTy.isVector() &&
- DstTy.getElementCount() != SrcTy.getElementCount())) {
- report("Generic vector abds/abdu must preserve number of lanes", MI);
- break;
- }
-
- if (SrcTy != SrcTy2) {
- report("Generic abds/abdu must have same input types", MI);
- break;
- }
-
- if (DstTy != SrcTy) {
- report("Generic abds/abdu must have same input and output types", MI);
- break;
- }
-
- break;
- }
case TargetOpcode::G_SCMP:
case TargetOpcode::G_UCMP: {
LLT DstTy = MRI->getType(MI->getOperand(0).getReg());
LLT SrcTy = MRI->getType(MI->getOperand(1).getReg());
- LLT SrcTy2 = MRI->getType(MI->getOperand(2).getReg());
- if (SrcTy.isPointerOrPointerVector() || SrcTy2.isPointerOrPointerVector()) {
+ if (SrcTy.isPointerOrPointerVector()) {
report("Generic scmp/ucmp does not support pointers as operands", MI);
break;
}
@@ -1626,6 +1601,11 @@ void MachineVerifier::verifyPreISelGenericInstruction(const MachineInstr *MI) {
break;
}
+ if (DstTy.getScalarSizeInBits() < 2) {
+ report("Result type must be at least 2 bits wide", MI);
+ break;
+ }
+
if ((DstTy.isVector() != SrcTy.isVector()) ||
(DstTy.isVector() &&
DstTy.getElementCount() != SrcTy.getElementCount())) {
@@ -1633,11 +1613,6 @@ void MachineVerifier::verifyPreISelGenericInstruction(const MachineInstr *MI) {
break;
}
- if (SrcTy != SrcTy2) {
- report("Generic scmp/ucmp must have same input types", MI);
- break;
- }
-
break;
}
case TargetOpcode::G_EXTRACT: {