@@ -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+
3743raw_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 {
211217bool 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 {
234248bool 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 {
274294unsigned 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}
0 commit comments