Skip to content

Commit 1416880

Browse files
davemgreenJaddyen
authored andcommitted
[GlobalISel] Put legalizer rule debug behind a verbose option. (llvm#138277)
With the large number of G_ opcodes now present, 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 f4d077a commit 1416880

File tree

3 files changed

+50
-25
lines changed

3 files changed

+50
-25
lines changed

llvm/lib/CodeGen/GlobalISel/LegalizerInfo.cpp

Lines changed: 47 additions & 22 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,28 @@ 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(dbgs() << ".. type index coverage check SKIPPED: "
222+
<< "no rules defined\n");
223+
}
216224
return true;
217225
}
218226
const int64_t FirstUncovered = TypeIdxsCovered.find_first_unset();
219227
if (FirstUncovered < 0) {
220-
LLVM_DEBUG(dbgs() << ".. type index coverage check SKIPPED:"
221-
" user-defined predicate detected\n");
228+
if (VerboseVerifyLegalizerInfo) {
229+
LLVM_DEBUG(dbgs() << ".. type index coverage check SKIPPED:"
230+
" user-defined predicate detected\n");
231+
}
222232
return true;
223233
}
224234
const bool AllCovered = (FirstUncovered >= NumTypeIdxs);
225-
if (NumTypeIdxs > 0)
226-
LLVM_DEBUG(dbgs() << ".. the first uncovered type index: " << FirstUncovered
227-
<< ", " << (AllCovered ? "OK" : "FAIL") << "\n");
235+
if (NumTypeIdxs > 0) {
236+
if (VerboseVerifyLegalizerInfo) {
237+
LLVM_DEBUG(dbgs() << ".. the first uncovered type index: "
238+
<< FirstUncovered << ", "
239+
<< (AllCovered ? "OK" : "FAIL") << "\n");
240+
}
241+
}
228242
return AllCovered;
229243
#else
230244
return true;
@@ -234,19 +248,25 @@ bool LegalizeRuleSet::verifyTypeIdxsCoverage(unsigned NumTypeIdxs) const {
234248
bool LegalizeRuleSet::verifyImmIdxsCoverage(unsigned NumImmIdxs) const {
235249
#ifndef NDEBUG
236250
if (Rules.empty()) {
237-
LLVM_DEBUG(
238-
dbgs() << ".. imm index coverage check SKIPPED: no rules defined\n");
251+
if (VerboseVerifyLegalizerInfo) {
252+
LLVM_DEBUG(dbgs() << ".. imm index coverage check SKIPPED: "
253+
<< "no rules defined\n");
254+
}
239255
return true;
240256
}
241257
const int64_t FirstUncovered = ImmIdxsCovered.find_first_unset();
242258
if (FirstUncovered < 0) {
243-
LLVM_DEBUG(dbgs() << ".. imm index coverage check SKIPPED:"
244-
" user-defined predicate detected\n");
259+
if (VerboseVerifyLegalizerInfo) {
260+
LLVM_DEBUG(dbgs() << ".. imm index coverage check SKIPPED:"
261+
" user-defined predicate detected\n");
262+
}
245263
return true;
246264
}
247265
const bool AllCovered = (FirstUncovered >= NumImmIdxs);
248-
LLVM_DEBUG(dbgs() << ".. the first uncovered imm index: " << FirstUncovered
249-
<< ", " << (AllCovered ? "OK" : "FAIL") << "\n");
266+
if (VerboseVerifyLegalizerInfo) {
267+
LLVM_DEBUG(dbgs() << ".. the first uncovered imm index: " << FirstUncovered
268+
<< ", " << (AllCovered ? "OK" : "FAIL") << "\n");
269+
}
250270
return AllCovered;
251271
#else
252272
return true;
@@ -274,8 +294,10 @@ unsigned LegalizerInfo::getOpcodeIdxForOpcode(unsigned Opcode) const {
274294
unsigned LegalizerInfo::getActionDefinitionsIdx(unsigned Opcode) const {
275295
unsigned OpcodeIdx = getOpcodeIdxForOpcode(Opcode);
276296
if (unsigned Alias = RulesForOpcode[OpcodeIdx].getAlias()) {
277-
LLVM_DEBUG(dbgs() << ".. opcode " << Opcode << " is aliased to " << Alias
278-
<< "\n");
297+
if (VerboseVerifyLegalizerInfo) {
298+
LLVM_DEBUG(dbgs() << ".. opcode " << Opcode << " is aliased to " << Alias
299+
<< "\n");
300+
}
279301
OpcodeIdx = getOpcodeIdxForOpcode(Alias);
280302
assert(RulesForOpcode[OpcodeIdx].getAlias() == 0 && "Cannot chain aliases");
281303
}
@@ -396,11 +418,13 @@ void LegalizerInfo::verify(const MCInstrInfo &MII) const {
396418
? std::max(OpInfo.getGenericImmIndex() + 1U, Acc)
397419
: Acc;
398420
});
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");
421+
if (VerboseVerifyLegalizerInfo) {
422+
LLVM_DEBUG(dbgs() << MII.getName(Opcode) << " (opcode " << Opcode
423+
<< "): " << NumTypeIdxs << " type ind"
424+
<< (NumTypeIdxs == 1 ? "ex" : "ices") << ", "
425+
<< NumImmIdxs << " imm ind"
426+
<< (NumImmIdxs == 1 ? "ex" : "ices") << "\n");
427+
}
404428
const LegalizeRuleSet &RuleSet = getActionDefinitions(Opcode);
405429
if (!RuleSet.verifyTypeIdxsCoverage(NumTypeIdxs))
406430
FailedOpcodes.push_back(Opcode);
@@ -413,8 +437,9 @@ void LegalizerInfo::verify(const MCInstrInfo &MII) const {
413437
errs() << " " << MII.getName(Opcode);
414438
errs() << "\n";
415439

416-
report_fatal_error("ill-defined LegalizerInfo"
417-
", try -debug-only=legalizer-info for details");
440+
report_fatal_error("ill-defined LegalizerInfo, try "
441+
"-debug-only=legalizer-info and "
442+
"-verbose-gisel-verify-legalizer-info for details");
418443
}
419444
#endif
420445
}

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)