From 14b392af1d696c3880b1ed1e5202533d7afe3855 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 24 Aug 2005 22:02:41 +0000 Subject: [PATCH 1/1] Add support for external symbols, and support for variable arity instructions git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23022 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/SelectionDAG/ScheduleDAG.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp b/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp index 7fa3c1c9e47..036023e0495 100644 --- a/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp +++ b/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp @@ -82,16 +82,20 @@ unsigned SimpleSched::Emit(SDOperand Op) { unsigned NumResults = Op.Val->getNumValues(); if (NumResults && Op.Val->getValueType(NumResults-1) == MVT::Other) --NumResults; + + unsigned NodeOperands = Op.getNumOperands(); + if (NodeOperands && // Ignore chain if it exists. + Op.getOperand(NodeOperands-1).getValueType() == MVT::Other) + --NodeOperands; + + unsigned NumMIOperands = NodeOperands+NumResults; #ifndef _NDEBUG - unsigned Operands = Op.getNumOperands(); - if (Operands && Op.getOperand(Operands-1).getValueType() == MVT::Other) - --Operands; - assert(unsigned(II.numOperands) == Operands+NumResults && + assert((unsigned(II.numOperands) == NumMIOperands || II.numOperands == -1)&& "#operands for dag node doesn't match .td file!"); #endif // Create the new machine instruction. - MachineInstr *MI = new MachineInstr(Opc, II.numOperands, true, true); + MachineInstr *MI = new MachineInstr(Opc, NumMIOperands, true, true); // Add result register values for things that are defined by this // instruction. @@ -136,6 +140,9 @@ unsigned SimpleSched::Emit(SDOperand Op) { } else if (ConstantPoolSDNode *CP = dyn_cast(Op.getOperand(i))) { MI->addConstantPoolIndexOperand(CP->getIndex()); + } else if (ExternalSymbolSDNode *ES = + dyn_cast(Op.getOperand(i))) { + MI->addExternalSymbolOperand(ES->getSymbol(), false); } else { unsigned R = Emit(Op.getOperand(i)); // Add an operand, unless this corresponds to a chain node. -- 2.34.1