diff --git a/llvm/include/llvm/CodeGen/SelectionDAGISel.h b/llvm/include/llvm/CodeGen/SelectionDAGISel.h index aa71be5d1960f..9800a18532d16 100644 --- a/llvm/include/llvm/CodeGen/SelectionDAGISel.h +++ b/llvm/include/llvm/CodeGen/SelectionDAGISel.h @@ -194,6 +194,14 @@ class SelectionDAGISel : public MachineFunctionPass { OPC_EmitRegister, OPC_EmitRegister2, OPC_EmitConvertToTarget, + OPC_EmitConvertToTarget0, + OPC_EmitConvertToTarget1, + OPC_EmitConvertToTarget2, + OPC_EmitConvertToTarget3, + OPC_EmitConvertToTarget4, + OPC_EmitConvertToTarget5, + OPC_EmitConvertToTarget6, + OPC_EmitConvertToTarget7, OPC_EmitMergeInputChains, OPC_EmitMergeInputChains1_0, OPC_EmitMergeInputChains1_1, diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index 2018b5f0ee29d..5ceabc296e180 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -3512,9 +3512,19 @@ void SelectionDAGISel::SelectCodeCommon(SDNode *NodeToMatch, continue; } - case OPC_EmitConvertToTarget: { + case OPC_EmitConvertToTarget: + case OPC_EmitConvertToTarget0: + case OPC_EmitConvertToTarget1: + case OPC_EmitConvertToTarget2: + case OPC_EmitConvertToTarget3: + case OPC_EmitConvertToTarget4: + case OPC_EmitConvertToTarget5: + case OPC_EmitConvertToTarget6: + case OPC_EmitConvertToTarget7: { // Convert from IMM/FPIMM to target version. - unsigned RecNo = MatcherTable[MatcherIndex++]; + unsigned RecNo = Opcode == OPC_EmitConvertToTarget + ? MatcherTable[MatcherIndex++] + : Opcode - OPC_EmitConvertToTarget0; assert(RecNo < RecordedNodes.size() && "Invalid EmitConvertToTarget"); SDValue Imm = RecordedNodes[RecNo].first; diff --git a/llvm/utils/TableGen/DAGISelMatcherEmitter.cpp b/llvm/utils/TableGen/DAGISelMatcherEmitter.cpp index ed4be74ad0d4f..903f45713a566 100644 --- a/llvm/utils/TableGen/DAGISelMatcherEmitter.cpp +++ b/llvm/utils/TableGen/DAGISelMatcherEmitter.cpp @@ -730,10 +730,15 @@ EmitMatcher(const Matcher *N, const unsigned Indent, unsigned CurrentIdx, } } - case Matcher::EmitConvertToTarget: - OS << "OPC_EmitConvertToTarget, " - << cast(N)->getSlot() << ",\n"; + case Matcher::EmitConvertToTarget: { + unsigned Slot = cast(N)->getSlot(); + if (Slot < 8) { + OS << "OPC_EmitConvertToTarget" << Slot << ",\n"; + return 1; + } + OS << "OPC_EmitConvertToTarget, " << Slot << ",\n"; return 2; + } case Matcher::EmitMergeInputChains: { const EmitMergeInputChainsMatcher *MN =