@@ -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,24 @@ 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 (
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 {
234244bool 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 {
274287unsigned 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);
0 commit comments