@@ -34,6 +34,12 @@ cl::opt<bool> llvm::DisableGISelLegalityCheck(
34
34
cl::desc (" Don't verify that MIR is fully legal between GlobalISel passes" ),
35
35
cl::Hidden);
36
36
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
+
37
43
raw_ostream &llvm::operator <<(raw_ostream &OS, LegalizeAction Action) {
38
44
switch (Action) {
39
45
case Legal:
@@ -211,20 +217,28 @@ LegalizeActionStep LegalizeRuleSet::apply(const LegalityQuery &Query) const {
211
217
bool LegalizeRuleSet::verifyTypeIdxsCoverage (unsigned NumTypeIdxs) const {
212
218
#ifndef NDEBUG
213
219
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
+ }
216
224
return true ;
217
225
}
218
226
const int64_t FirstUncovered = TypeIdxsCovered.find_first_unset ();
219
227
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
+ }
222
232
return true ;
223
233
}
224
234
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
+ }
228
242
return AllCovered;
229
243
#else
230
244
return true ;
@@ -234,19 +248,25 @@ bool LegalizeRuleSet::verifyTypeIdxsCoverage(unsigned NumTypeIdxs) const {
234
248
bool LegalizeRuleSet::verifyImmIdxsCoverage (unsigned NumImmIdxs) const {
235
249
#ifndef NDEBUG
236
250
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
+ }
239
255
return true ;
240
256
}
241
257
const int64_t FirstUncovered = ImmIdxsCovered.find_first_unset ();
242
258
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
+ }
245
263
return true ;
246
264
}
247
265
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
+ }
250
270
return AllCovered;
251
271
#else
252
272
return true ;
@@ -274,8 +294,10 @@ unsigned LegalizerInfo::getOpcodeIdxForOpcode(unsigned Opcode) const {
274
294
unsigned LegalizerInfo::getActionDefinitionsIdx (unsigned Opcode) const {
275
295
unsigned OpcodeIdx = getOpcodeIdxForOpcode (Opcode);
276
296
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
+ }
279
301
OpcodeIdx = getOpcodeIdxForOpcode (Alias);
280
302
assert (RulesForOpcode[OpcodeIdx].getAlias () == 0 && " Cannot chain aliases" );
281
303
}
@@ -396,11 +418,13 @@ void LegalizerInfo::verify(const MCInstrInfo &MII) const {
396
418
? std::max (OpInfo.getGenericImmIndex () + 1U , Acc)
397
419
: Acc;
398
420
});
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
+ }
404
428
const LegalizeRuleSet &RuleSet = getActionDefinitions (Opcode);
405
429
if (!RuleSet.verifyTypeIdxsCoverage (NumTypeIdxs))
406
430
FailedOpcodes.push_back (Opcode);
@@ -413,8 +437,9 @@ void LegalizerInfo::verify(const MCInstrInfo &MII) const {
413
437
errs () << " " << MII.getName (Opcode);
414
438
errs () << " \n " ;
415
439
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" );
418
443
}
419
444
#endif
420
445
}
0 commit comments