/// RecordMatcherNode - Save the current node in the operand list.
class RecordMatcherNode : public MatcherNodeWithChild {
+ /// WhatFor - This is a string indicating why we're recording this. This
+ /// should only be used for comment generation not anything semantic.
+ std::string WhatFor;
public:
- RecordMatcherNode() : MatcherNodeWithChild(Record) {}
+ RecordMatcherNode(StringRef whatfor)
+ : MatcherNodeWithChild(Record), WhatFor(whatfor) {}
+
+ StringRef getWhatFor() const { return WhatFor; }
static inline bool classof(const MatcherNode *N) {
return N->getKind() == Record;
OS.PadToColumn(Indent*2) << "OPC_Emit, /*XXX*/\n\n";
return 1;
case MatcherNode::Record:
- OS << "OPC_Record,\n";
+ OS << "OPC_Record,";
+ OS.PadToColumn(CommentIndent) << "// "
+ << cast<RecordMatcherNode>(N)->getWhatFor() << '\n';
return 1;
case MatcherNode::MoveChild:
OS << "OPC_MoveChild, "
NumRecorded += 2; // Input and output chains.
} else {
// If it is a normal named node, we must emit a 'Record' opcode.
- AddMatcherNode(new RecordMatcherNode());
+ AddMatcherNode(new RecordMatcherNode(N->getName()));
NumRecorded = 1;
}
NextRecordedOperandNo += NumRecorded;