我发现 LLVM 构建过程用于Target/MyArch/MyArchInstrInfo.td
生成MyArchGenDAGISel.inc
文件等。调试消息中的数字对应于该文件中的标签;例如,这是我问题中示例的相关部分。它几乎提供了我所希望的那种信息。
/*581*/ OPC_RecordMemRef,
/*582*/ OPC_RecordNode, // #0 = 'ld' chained node
/*583*/ OPC_Scope, 39, /*->624*/ // 3 children in Scope
/*585*/ OPC_RecordChild1, // #1 = $memri
/*586*/ OPC_CheckPredicate, 1, // Predicate_unindexedload
/*588*/ OPC_CheckPredicate, 2, // Predicate_load
/*590*/ OPC_SwitchType /*2 cases */, 14, MVT::i8,// ->607
/*593*/ OPC_CheckPatternPredicate, 0, // (Subtarget->hasSRAM())
/*595*/ OPC_CheckComplexPat, /*CP*/0, /*#*/1, // SelectAddr:$memri #2 #3
/*624*/ /*Scope*/ 37, /*->662*/
/*625*/ OPC_MoveChild1,
/*626*/ OPC_CheckOpcode, TARGET_VAL(AVRISD::WRAPPER),
/*662*/ /*Scope*/ 125, /*->788*/
/*663*/ OPC_RecordChild1, // #1 = $src
/*664*/ OPC_Scope, 88, /*->754*/ // 2 children in Scope
/*666*/ OPC_MoveChild1,
/*667*/ OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
/*754*/ /*Scope*/ 32, /*->787*/
/*755*/ OPC_CheckChild1Type, MVT::i16,
/*757*/ OPC_CheckPredicate, 1, // Predicate_unindexedload
/*759*/ OPC_CheckPredicate, 2, // Predicate_load
/*761*/ OPC_SwitchType /*2 cases */, 10, MVT::i8,// ->774
/*764*/ OPC_CheckPatternPredicate, 0, // (Subtarget->hasSRAM())
/*766*/ OPC_EmitMergeInputChains1_0,
/*767*/ OPC_MorphNodeTo1, TARGET_VAL(AVR::LDRdPtr), 0|OPFL_Chain|OPFL_MemRefs,
MVT::i8, 1/*#Ops*/, 1,
// Src: (ld:i8 i16:i16:$ptrreg)<<P:Predicate_unindexedload>><<P:Predicate_load>> - Complexity = 4
// Dst: (LDRdPtr:i8 i16:i16:$ptrreg)