Skip to content

Commit 345440e

Browse files
committed
[GlobalISel] Put legalizer rule debug behind a verbose option.
With the larger number of G_ opcodes now, this debug information emitted for checking the global isel legalizer rules are valid is quite verbose and runs even when gisel is not being used. This makes it especially verbose when running a single pass with -debug. This patch puts it behind a verbose debug option so that most people don't need to worry about it.
1 parent ea08dd8 commit 345440e

File tree

3 files changed

+37
-22
lines changed

3 files changed

+37
-22
lines changed

llvm/lib/CodeGen/GlobalISel/LegalizerInfo.cpp

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,12 @@ cl::opt<bool> llvm::DisableGISelLegalityCheck(
3434
cl::desc("Don't verify that MIR is fully legal between GlobalISel passes"),
3535
cl::Hidden);
3636

37+
cl::opt<bool> VerboseVerifyLegalizerInfo(
38+
"verbose-gisel-verify-legalizer-info",
39+
cl::desc("Print more information to dbgs about GlobalISel legalizer rules "
40+
"being verified"),
41+
cl::Hidden);
42+
3743
raw_ostream &llvm::operator<<(raw_ostream &OS, LegalizeAction Action) {
3844
switch (Action) {
3945
case Legal:
@@ -211,20 +217,24 @@ LegalizeActionStep LegalizeRuleSet::apply(const LegalityQuery &Query) const {
211217
bool LegalizeRuleSet::verifyTypeIdxsCoverage(unsigned NumTypeIdxs) const {
212218
#ifndef NDEBUG
213219
if (Rules.empty()) {
214-
LLVM_DEBUG(
215-
dbgs() << ".. type index coverage check SKIPPED: no rules defined\n");
220+
if (VerboseVerifyLegalizerInfo)
221+
LLVM_DEBUG(
222+
dbgs() << ".. type index coverage check SKIPPED: no rules defined\n");
216223
return true;
217224
}
218225
const int64_t FirstUncovered = TypeIdxsCovered.find_first_unset();
219226
if (FirstUncovered < 0) {
220-
LLVM_DEBUG(dbgs() << ".. type index coverage check SKIPPED:"
221-
" user-defined predicate detected\n");
227+
if (VerboseVerifyLegalizerInfo)
228+
LLVM_DEBUG(dbgs() << ".. type index coverage check SKIPPED:"
229+
" user-defined predicate detected\n");
222230
return true;
223231
}
224232
const bool AllCovered = (FirstUncovered >= NumTypeIdxs);
225233
if (NumTypeIdxs > 0)
226-
LLVM_DEBUG(dbgs() << ".. the first uncovered type index: " << FirstUncovered
227-
<< ", " << (AllCovered ? "OK" : "FAIL") << "\n");
234+
if (VerboseVerifyLegalizerInfo)
235+
LLVM_DEBUG(dbgs() << ".. the first uncovered type index: "
236+
<< FirstUncovered << ", "
237+
<< (AllCovered ? "OK" : "FAIL") << "\n");
228238
return AllCovered;
229239
#else
230240
return true;
@@ -234,19 +244,22 @@ bool LegalizeRuleSet::verifyTypeIdxsCoverage(unsigned NumTypeIdxs) const {
234244
bool LegalizeRuleSet::verifyImmIdxsCoverage(unsigned NumImmIdxs) const {
235245
#ifndef NDEBUG
236246
if (Rules.empty()) {
237-
LLVM_DEBUG(
238-
dbgs() << ".. imm index coverage check SKIPPED: no rules defined\n");
247+
if (VerboseVerifyLegalizerInfo)
248+
LLVM_DEBUG(
249+
dbgs() << ".. imm index coverage check SKIPPED: no rules defined\n");
239250
return true;
240251
}
241252
const int64_t FirstUncovered = ImmIdxsCovered.find_first_unset();
242253
if (FirstUncovered < 0) {
243-
LLVM_DEBUG(dbgs() << ".. imm index coverage check SKIPPED:"
244-
" user-defined predicate detected\n");
254+
if (VerboseVerifyLegalizerInfo)
255+
LLVM_DEBUG(dbgs() << ".. imm index coverage check SKIPPED:"
256+
" user-defined predicate detected\n");
245257
return true;
246258
}
247259
const bool AllCovered = (FirstUncovered >= NumImmIdxs);
248-
LLVM_DEBUG(dbgs() << ".. the first uncovered imm index: " << FirstUncovered
249-
<< ", " << (AllCovered ? "OK" : "FAIL") << "\n");
260+
if (VerboseVerifyLegalizerInfo)
261+
LLVM_DEBUG(dbgs() << ".. the first uncovered imm index: " << FirstUncovered
262+
<< ", " << (AllCovered ? "OK" : "FAIL") << "\n");
250263
return AllCovered;
251264
#else
252265
return true;
@@ -274,8 +287,9 @@ unsigned LegalizerInfo::getOpcodeIdxForOpcode(unsigned Opcode) const {
274287
unsigned LegalizerInfo::getActionDefinitionsIdx(unsigned Opcode) const {
275288
unsigned OpcodeIdx = getOpcodeIdxForOpcode(Opcode);
276289
if (unsigned Alias = RulesForOpcode[OpcodeIdx].getAlias()) {
277-
LLVM_DEBUG(dbgs() << ".. opcode " << Opcode << " is aliased to " << Alias
278-
<< "\n");
290+
if (VerboseVerifyLegalizerInfo)
291+
LLVM_DEBUG(dbgs() << ".. opcode " << Opcode << " is aliased to " << Alias
292+
<< "\n");
279293
OpcodeIdx = getOpcodeIdxForOpcode(Alias);
280294
assert(RulesForOpcode[OpcodeIdx].getAlias() == 0 && "Cannot chain aliases");
281295
}
@@ -396,11 +410,12 @@ void LegalizerInfo::verify(const MCInstrInfo &MII) const {
396410
? std::max(OpInfo.getGenericImmIndex() + 1U, Acc)
397411
: Acc;
398412
});
399-
LLVM_DEBUG(dbgs() << MII.getName(Opcode) << " (opcode " << Opcode
400-
<< "): " << NumTypeIdxs << " type ind"
401-
<< (NumTypeIdxs == 1 ? "ex" : "ices") << ", "
402-
<< NumImmIdxs << " imm ind"
403-
<< (NumImmIdxs == 1 ? "ex" : "ices") << "\n");
413+
if (VerboseVerifyLegalizerInfo)
414+
LLVM_DEBUG(dbgs() << MII.getName(Opcode) << " (opcode " << Opcode
415+
<< "): " << NumTypeIdxs << " type ind"
416+
<< (NumTypeIdxs == 1 ? "ex" : "ices") << ", "
417+
<< NumImmIdxs << " imm ind"
418+
<< (NumImmIdxs == 1 ? "ex" : "ices") << "\n");
404419
const LegalizeRuleSet &RuleSet = getActionDefinitions(Opcode);
405420
if (!RuleSet.verifyTypeIdxsCoverage(NumTypeIdxs))
406421
FailedOpcodes.push_back(Opcode);

llvm/test/CodeGen/AArch64/GlobalISel/legalizer-info-validation.mir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# RUN: llc -mtriple=aarch64-- -run-pass=legalizer %s \
33
# RUN: -mcpu=cortex-a75 -o - 2>&1 | FileCheck %s --check-prefixes=CHECK
44

5-
# RUN: llc -mtriple=aarch64-- -run-pass=legalizer %s -debug-only=legalizer-info \
5+
# RUN: llc -mtriple=aarch64-- -run-pass=legalizer %s -debug-only=legalizer-info -verbose-gisel-verify-legalizer-info \
66
# RUN: -mcpu=cortex-a75 -o - 2>&1 | FileCheck %s --check-prefixes=CHECK,DEBUG
77

88
# REQUIRES: asserts

llvm/test/CodeGen/RISCV/GlobalISel/legalizer-info-validation.mir

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
# RUN: llc -mtriple=riscv64-- -run-pass=legalizer %s \
55
# RUN: -mattr=+m,+zbb,+zfh,+v -o - 2>&1 | FileCheck %s --check-prefixes=CHECK
66

7-
# RUN: llc -mtriple=riscv32-- -run-pass=legalizer %s -debug-only=legalizer-info \
7+
# RUN: llc -mtriple=riscv32-- -run-pass=legalizer %s -debug-only=legalizer-info -verbose-gisel-verify-legalizer-info \
88
# RUN: -mattr=+m,+zbb,+zfh,+v -o - 2>&1 | FileCheck %s --check-prefixes=CHECK,DEBUG,DEBUG-RV32
9-
# RUN: llc -mtriple=riscv64-- -run-pass=legalizer %s -debug-only=legalizer-info \
9+
# RUN: llc -mtriple=riscv64-- -run-pass=legalizer %s -debug-only=legalizer-info -verbose-gisel-verify-legalizer-info \
1010
# RUN: -mattr=+m,+zbb,+zfh,+v -o - 2>&1 | FileCheck %s --check-prefixes=CHECK,DEBUG,DEBUG-RV64
1111

1212
# REQUIRES: asserts

0 commit comments

Comments
 (0)