restore some 'magic' code that I removed: it is needed. Add comments explaining
[oota-llvm.git] / utils / TableGen / DAGISelEmitter.cpp
1 //===- DAGISelEmitter.cpp - Generate an instruction selector --------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file was developed by Chris Lattner and is distributed under
6 // the University of Illinois Open Source License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This tablegen backend emits a DAG instruction selector.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #include "DAGISelEmitter.h"
15 #include "Record.h"
16 #include "llvm/ADT/StringExtras.h"
17 #include "llvm/Support/Debug.h"
18 #include "llvm/Support/MathExtras.h"
19 #include <algorithm>
20 #include <set>
21 using namespace llvm;
22
23 //===----------------------------------------------------------------------===//
24 // Helpers for working with extended types.
25
26 /// FilterVTs - Filter a list of VT's according to a predicate.
27 ///
28 template<typename T>
29 static std::vector<MVT::ValueType> 
30 FilterVTs(const std::vector<MVT::ValueType> &InVTs, T Filter) {
31   std::vector<MVT::ValueType> Result;
32   for (unsigned i = 0, e = InVTs.size(); i != e; ++i)
33     if (Filter(InVTs[i]))
34       Result.push_back(InVTs[i]);
35   return Result;
36 }
37
38 template<typename T>
39 static std::vector<unsigned char> 
40 FilterEVTs(const std::vector<unsigned char> &InVTs, T Filter) {
41   std::vector<unsigned char> Result;
42   for (unsigned i = 0, e = InVTs.size(); i != e; ++i)
43     if (Filter((MVT::ValueType)InVTs[i]))
44       Result.push_back(InVTs[i]);
45   return Result;
46 }
47
48 static std::vector<unsigned char>
49 ConvertVTs(const std::vector<MVT::ValueType> &InVTs) {
50   std::vector<unsigned char> Result;
51   for (unsigned i = 0, e = InVTs.size(); i != e; ++i)
52       Result.push_back(InVTs[i]);
53   return Result;
54 }
55
56 static bool LHSIsSubsetOfRHS(const std::vector<unsigned char> &LHS,
57                              const std::vector<unsigned char> &RHS) {
58   if (LHS.size() > RHS.size()) return false;
59   for (unsigned i = 0, e = LHS.size(); i != e; ++i)
60     if (std::find(RHS.begin(), RHS.end(), LHS[i]) == RHS.end())
61       return false;
62   return true;
63 }
64
65 /// isExtIntegerVT - Return true if the specified extended value type vector
66 /// contains isInt or an integer value type.
67 static bool isExtIntegerInVTs(const std::vector<unsigned char> &EVTs) {
68   assert(!EVTs.empty() && "Cannot check for integer in empty ExtVT list!");
69   return EVTs[0] == MVT::isInt || !(FilterEVTs(EVTs, MVT::isInteger).empty());
70 }
71
72 /// isExtFloatingPointVT - Return true if the specified extended value type 
73 /// vector contains isFP or a FP value type.
74 static bool isExtFloatingPointInVTs(const std::vector<unsigned char> &EVTs) {
75   assert(!EVTs.empty() && "Cannot check for integer in empty ExtVT list!");
76   return EVTs[0] == MVT::isFP ||
77          !(FilterEVTs(EVTs, MVT::isFloatingPoint).empty());
78 }
79
80 //===----------------------------------------------------------------------===//
81 // SDTypeConstraint implementation
82 //
83
84 SDTypeConstraint::SDTypeConstraint(Record *R) {
85   OperandNo = R->getValueAsInt("OperandNum");
86   
87   if (R->isSubClassOf("SDTCisVT")) {
88     ConstraintType = SDTCisVT;
89     x.SDTCisVT_Info.VT = getValueType(R->getValueAsDef("VT"));
90   } else if (R->isSubClassOf("SDTCisPtrTy")) {
91     ConstraintType = SDTCisPtrTy;
92   } else if (R->isSubClassOf("SDTCisInt")) {
93     ConstraintType = SDTCisInt;
94   } else if (R->isSubClassOf("SDTCisFP")) {
95     ConstraintType = SDTCisFP;
96   } else if (R->isSubClassOf("SDTCisSameAs")) {
97     ConstraintType = SDTCisSameAs;
98     x.SDTCisSameAs_Info.OtherOperandNum = R->getValueAsInt("OtherOperandNum");
99   } else if (R->isSubClassOf("SDTCisVTSmallerThanOp")) {
100     ConstraintType = SDTCisVTSmallerThanOp;
101     x.SDTCisVTSmallerThanOp_Info.OtherOperandNum = 
102       R->getValueAsInt("OtherOperandNum");
103   } else if (R->isSubClassOf("SDTCisOpSmallerThanOp")) {
104     ConstraintType = SDTCisOpSmallerThanOp;
105     x.SDTCisOpSmallerThanOp_Info.BigOperandNum = 
106       R->getValueAsInt("BigOperandNum");
107   } else if (R->isSubClassOf("SDTCisIntVectorOfSameSize")) {
108     ConstraintType = SDTCisIntVectorOfSameSize;
109     x.SDTCisIntVectorOfSameSize_Info.OtherOperandNum =
110       R->getValueAsInt("OtherOpNum");
111   } else {
112     std::cerr << "Unrecognized SDTypeConstraint '" << R->getName() << "'!\n";
113     exit(1);
114   }
115 }
116
117 /// getOperandNum - Return the node corresponding to operand #OpNo in tree
118 /// N, which has NumResults results.
119 TreePatternNode *SDTypeConstraint::getOperandNum(unsigned OpNo,
120                                                  TreePatternNode *N,
121                                                  unsigned NumResults) const {
122   assert(NumResults <= 1 &&
123          "We only work with nodes with zero or one result so far!");
124   
125   if (OpNo >= (NumResults + N->getNumChildren())) {
126     std::cerr << "Invalid operand number " << OpNo << " ";
127     N->dump();
128     std::cerr << '\n';
129     exit(1);
130   }
131
132   if (OpNo < NumResults)
133     return N;  // FIXME: need value #
134   else
135     return N->getChild(OpNo-NumResults);
136 }
137
138 /// ApplyTypeConstraint - Given a node in a pattern, apply this type
139 /// constraint to the nodes operands.  This returns true if it makes a
140 /// change, false otherwise.  If a type contradiction is found, throw an
141 /// exception.
142 bool SDTypeConstraint::ApplyTypeConstraint(TreePatternNode *N,
143                                            const SDNodeInfo &NodeInfo,
144                                            TreePattern &TP) const {
145   unsigned NumResults = NodeInfo.getNumResults();
146   assert(NumResults <= 1 &&
147          "We only work with nodes with zero or one result so far!");
148   
149   // Check that the number of operands is sane.  Negative operands -> varargs.
150   if (NodeInfo.getNumOperands() >= 0) {
151     if (N->getNumChildren() != (unsigned)NodeInfo.getNumOperands())
152       TP.error(N->getOperator()->getName() + " node requires exactly " +
153                itostr(NodeInfo.getNumOperands()) + " operands!");
154   }
155
156   const CodeGenTarget &CGT = TP.getDAGISelEmitter().getTargetInfo();
157   
158   TreePatternNode *NodeToApply = getOperandNum(OperandNo, N, NumResults);
159   
160   switch (ConstraintType) {
161   default: assert(0 && "Unknown constraint type!");
162   case SDTCisVT:
163     // Operand must be a particular type.
164     return NodeToApply->UpdateNodeType(x.SDTCisVT_Info.VT, TP);
165   case SDTCisPtrTy: {
166     // Operand must be same as target pointer type.
167     return NodeToApply->UpdateNodeType(MVT::iPTR, TP);
168   }
169   case SDTCisInt: {
170     // If there is only one integer type supported, this must be it.
171     std::vector<MVT::ValueType> IntVTs =
172       FilterVTs(CGT.getLegalValueTypes(), MVT::isInteger);
173
174     // If we found exactly one supported integer type, apply it.
175     if (IntVTs.size() == 1)
176       return NodeToApply->UpdateNodeType(IntVTs[0], TP);
177     return NodeToApply->UpdateNodeType(MVT::isInt, TP);
178   }
179   case SDTCisFP: {
180     // If there is only one FP type supported, this must be it.
181     std::vector<MVT::ValueType> FPVTs =
182       FilterVTs(CGT.getLegalValueTypes(), MVT::isFloatingPoint);
183         
184     // If we found exactly one supported FP type, apply it.
185     if (FPVTs.size() == 1)
186       return NodeToApply->UpdateNodeType(FPVTs[0], TP);
187     return NodeToApply->UpdateNodeType(MVT::isFP, TP);
188   }
189   case SDTCisSameAs: {
190     TreePatternNode *OtherNode =
191       getOperandNum(x.SDTCisSameAs_Info.OtherOperandNum, N, NumResults);
192     return NodeToApply->UpdateNodeType(OtherNode->getExtTypes(), TP) |
193            OtherNode->UpdateNodeType(NodeToApply->getExtTypes(), TP);
194   }
195   case SDTCisVTSmallerThanOp: {
196     // The NodeToApply must be a leaf node that is a VT.  OtherOperandNum must
197     // have an integer type that is smaller than the VT.
198     if (!NodeToApply->isLeaf() ||
199         !dynamic_cast<DefInit*>(NodeToApply->getLeafValue()) ||
200         !static_cast<DefInit*>(NodeToApply->getLeafValue())->getDef()
201                ->isSubClassOf("ValueType"))
202       TP.error(N->getOperator()->getName() + " expects a VT operand!");
203     MVT::ValueType VT =
204      getValueType(static_cast<DefInit*>(NodeToApply->getLeafValue())->getDef());
205     if (!MVT::isInteger(VT))
206       TP.error(N->getOperator()->getName() + " VT operand must be integer!");
207     
208     TreePatternNode *OtherNode =
209       getOperandNum(x.SDTCisVTSmallerThanOp_Info.OtherOperandNum, N,NumResults);
210     
211     // It must be integer.
212     bool MadeChange = false;
213     MadeChange |= OtherNode->UpdateNodeType(MVT::isInt, TP);
214     
215     // This code only handles nodes that have one type set.  Assert here so
216     // that we can change this if we ever need to deal with multiple value
217     // types at this point.
218     assert(OtherNode->getExtTypes().size() == 1 && "Node has too many types!");
219     if (OtherNode->hasTypeSet() && OtherNode->getTypeNum(0) <= VT)
220       OtherNode->UpdateNodeType(MVT::Other, TP);  // Throw an error.
221     return false;
222   }
223   case SDTCisOpSmallerThanOp: {
224     TreePatternNode *BigOperand =
225       getOperandNum(x.SDTCisOpSmallerThanOp_Info.BigOperandNum, N, NumResults);
226
227     // Both operands must be integer or FP, but we don't care which.
228     bool MadeChange = false;
229     
230     // This code does not currently handle nodes which have multiple types,
231     // where some types are integer, and some are fp.  Assert that this is not
232     // the case.
233     assert(!(isExtIntegerInVTs(NodeToApply->getExtTypes()) &&
234              isExtFloatingPointInVTs(NodeToApply->getExtTypes())) &&
235            !(isExtIntegerInVTs(BigOperand->getExtTypes()) &&
236              isExtFloatingPointInVTs(BigOperand->getExtTypes())) &&
237            "SDTCisOpSmallerThanOp does not handle mixed int/fp types!");
238     if (isExtIntegerInVTs(NodeToApply->getExtTypes()))
239       MadeChange |= BigOperand->UpdateNodeType(MVT::isInt, TP);
240     else if (isExtFloatingPointInVTs(NodeToApply->getExtTypes()))
241       MadeChange |= BigOperand->UpdateNodeType(MVT::isFP, TP);
242     if (isExtIntegerInVTs(BigOperand->getExtTypes()))
243       MadeChange |= NodeToApply->UpdateNodeType(MVT::isInt, TP);
244     else if (isExtFloatingPointInVTs(BigOperand->getExtTypes()))
245       MadeChange |= NodeToApply->UpdateNodeType(MVT::isFP, TP);
246
247     std::vector<MVT::ValueType> VTs = CGT.getLegalValueTypes();
248     
249     if (isExtIntegerInVTs(NodeToApply->getExtTypes())) {
250       VTs = FilterVTs(VTs, MVT::isInteger);
251     } else if (isExtFloatingPointInVTs(NodeToApply->getExtTypes())) {
252       VTs = FilterVTs(VTs, MVT::isFloatingPoint);
253     } else {
254       VTs.clear();
255     }
256
257     switch (VTs.size()) {
258     default:         // Too many VT's to pick from.
259     case 0: break;   // No info yet.
260     case 1: 
261       // Only one VT of this flavor.  Cannot ever satisify the constraints.
262       return NodeToApply->UpdateNodeType(MVT::Other, TP);  // throw
263     case 2:
264       // If we have exactly two possible types, the little operand must be the
265       // small one, the big operand should be the big one.  Common with 
266       // float/double for example.
267       assert(VTs[0] < VTs[1] && "Should be sorted!");
268       MadeChange |= NodeToApply->UpdateNodeType(VTs[0], TP);
269       MadeChange |= BigOperand->UpdateNodeType(VTs[1], TP);
270       break;
271     }    
272     return MadeChange;
273   }
274   case SDTCisIntVectorOfSameSize: {
275     TreePatternNode *OtherOperand =
276       getOperandNum(x.SDTCisIntVectorOfSameSize_Info.OtherOperandNum,
277                     N, NumResults);
278     if (OtherOperand->hasTypeSet()) {
279       if (!MVT::isVector(OtherOperand->getTypeNum(0)))
280         TP.error(N->getOperator()->getName() + " VT operand must be a vector!");
281       MVT::ValueType IVT = OtherOperand->getTypeNum(0);
282       IVT = MVT::getIntVectorWithNumElements(MVT::getVectorNumElements(IVT));
283       return NodeToApply->UpdateNodeType(IVT, TP);
284     }
285     return false;
286   }
287   }  
288   return false;
289 }
290
291
292 //===----------------------------------------------------------------------===//
293 // SDNodeInfo implementation
294 //
295 SDNodeInfo::SDNodeInfo(Record *R) : Def(R) {
296   EnumName    = R->getValueAsString("Opcode");
297   SDClassName = R->getValueAsString("SDClass");
298   Record *TypeProfile = R->getValueAsDef("TypeProfile");
299   NumResults = TypeProfile->getValueAsInt("NumResults");
300   NumOperands = TypeProfile->getValueAsInt("NumOperands");
301   
302   // Parse the properties.
303   Properties = 0;
304   std::vector<Record*> PropList = R->getValueAsListOfDefs("Properties");
305   for (unsigned i = 0, e = PropList.size(); i != e; ++i) {
306     if (PropList[i]->getName() == "SDNPCommutative") {
307       Properties |= 1 << SDNPCommutative;
308     } else if (PropList[i]->getName() == "SDNPAssociative") {
309       Properties |= 1 << SDNPAssociative;
310     } else if (PropList[i]->getName() == "SDNPHasChain") {
311       Properties |= 1 << SDNPHasChain;
312     } else if (PropList[i]->getName() == "SDNPOutFlag") {
313       Properties |= 1 << SDNPOutFlag;
314     } else if (PropList[i]->getName() == "SDNPInFlag") {
315       Properties |= 1 << SDNPInFlag;
316     } else if (PropList[i]->getName() == "SDNPOptInFlag") {
317       Properties |= 1 << SDNPOptInFlag;
318     } else {
319       std::cerr << "Unknown SD Node property '" << PropList[i]->getName()
320                 << "' on node '" << R->getName() << "'!\n";
321       exit(1);
322     }
323   }
324   
325   
326   // Parse the type constraints.
327   std::vector<Record*> ConstraintList =
328     TypeProfile->getValueAsListOfDefs("Constraints");
329   TypeConstraints.assign(ConstraintList.begin(), ConstraintList.end());
330 }
331
332 //===----------------------------------------------------------------------===//
333 // TreePatternNode implementation
334 //
335
336 TreePatternNode::~TreePatternNode() {
337 #if 0 // FIXME: implement refcounted tree nodes!
338   for (unsigned i = 0, e = getNumChildren(); i != e; ++i)
339     delete getChild(i);
340 #endif
341 }
342
343 /// UpdateNodeType - Set the node type of N to VT if VT contains
344 /// information.  If N already contains a conflicting type, then throw an
345 /// exception.  This returns true if any information was updated.
346 ///
347 bool TreePatternNode::UpdateNodeType(const std::vector<unsigned char> &ExtVTs,
348                                      TreePattern &TP) {
349   assert(!ExtVTs.empty() && "Cannot update node type with empty type vector!");
350   
351   if (ExtVTs[0] == MVT::isUnknown || LHSIsSubsetOfRHS(getExtTypes(), ExtVTs)) 
352     return false;
353   if (isTypeCompletelyUnknown() || LHSIsSubsetOfRHS(ExtVTs, getExtTypes())) {
354     setTypes(ExtVTs);
355     return true;
356   }
357
358   if (getExtTypeNum(0) == MVT::iPTR) {
359     if (ExtVTs[0] == MVT::iPTR || ExtVTs[0] == MVT::isInt)
360       return false;
361     if (isExtIntegerInVTs(ExtVTs)) {
362       std::vector<unsigned char> FVTs = FilterEVTs(ExtVTs, MVT::isInteger);
363       if (FVTs.size()) {
364         setTypes(ExtVTs);
365         return true;
366       }
367     }
368   }
369   
370   if (ExtVTs[0] == MVT::isInt && isExtIntegerInVTs(getExtTypes())) {
371     assert(hasTypeSet() && "should be handled above!");
372     std::vector<unsigned char> FVTs = FilterEVTs(getExtTypes(), MVT::isInteger);
373     if (getExtTypes() == FVTs)
374       return false;
375     setTypes(FVTs);
376     return true;
377   }
378   if (ExtVTs[0] == MVT::iPTR && isExtIntegerInVTs(getExtTypes())) {
379     //assert(hasTypeSet() && "should be handled above!");
380     std::vector<unsigned char> FVTs = FilterEVTs(getExtTypes(), MVT::isInteger);
381     if (getExtTypes() == FVTs)
382       return false;
383     if (FVTs.size()) {
384       setTypes(FVTs);
385       return true;
386     }
387   }      
388   if (ExtVTs[0] == MVT::isFP  && isExtFloatingPointInVTs(getExtTypes())) {
389     assert(hasTypeSet() && "should be handled above!");
390     std::vector<unsigned char> FVTs =
391       FilterEVTs(getExtTypes(), MVT::isFloatingPoint);
392     if (getExtTypes() == FVTs)
393       return false;
394     setTypes(FVTs);
395     return true;
396   }
397       
398   // If we know this is an int or fp type, and we are told it is a specific one,
399   // take the advice.
400   //
401   // Similarly, we should probably set the type here to the intersection of
402   // {isInt|isFP} and ExtVTs
403   if ((getExtTypeNum(0) == MVT::isInt && isExtIntegerInVTs(ExtVTs)) ||
404       (getExtTypeNum(0) == MVT::isFP  && isExtFloatingPointInVTs(ExtVTs))) {
405     setTypes(ExtVTs);
406     return true;
407   }
408   if (getExtTypeNum(0) == MVT::isInt && ExtVTs[0] == MVT::iPTR) {
409     setTypes(ExtVTs);
410     return true;
411   }
412
413   if (isLeaf()) {
414     dump();
415     std::cerr << " ";
416     TP.error("Type inference contradiction found in node!");
417   } else {
418     TP.error("Type inference contradiction found in node " + 
419              getOperator()->getName() + "!");
420   }
421   return true; // unreachable
422 }
423
424
425 void TreePatternNode::print(std::ostream &OS) const {
426   if (isLeaf()) {
427     OS << *getLeafValue();
428   } else {
429     OS << "(" << getOperator()->getName();
430   }
431   
432   // FIXME: At some point we should handle printing all the value types for 
433   // nodes that are multiply typed.
434   switch (getExtTypeNum(0)) {
435   case MVT::Other: OS << ":Other"; break;
436   case MVT::isInt: OS << ":isInt"; break;
437   case MVT::isFP : OS << ":isFP"; break;
438   case MVT::isUnknown: ; /*OS << ":?";*/ break;
439   case MVT::iPTR:  OS << ":iPTR"; break;
440   default: {
441     std::string VTName = llvm::getName(getTypeNum(0));
442     // Strip off MVT:: prefix if present.
443     if (VTName.substr(0,5) == "MVT::")
444       VTName = VTName.substr(5);
445     OS << ":" << VTName;
446     break;
447   }
448   }
449
450   if (!isLeaf()) {
451     if (getNumChildren() != 0) {
452       OS << " ";
453       getChild(0)->print(OS);
454       for (unsigned i = 1, e = getNumChildren(); i != e; ++i) {
455         OS << ", ";
456         getChild(i)->print(OS);
457       }
458     }
459     OS << ")";
460   }
461   
462   if (!PredicateFn.empty())
463     OS << "<<P:" << PredicateFn << ">>";
464   if (TransformFn)
465     OS << "<<X:" << TransformFn->getName() << ">>";
466   if (!getName().empty())
467     OS << ":$" << getName();
468
469 }
470 void TreePatternNode::dump() const {
471   print(std::cerr);
472 }
473
474 /// isIsomorphicTo - Return true if this node is recursively isomorphic to
475 /// the specified node.  For this comparison, all of the state of the node
476 /// is considered, except for the assigned name.  Nodes with differing names
477 /// that are otherwise identical are considered isomorphic.
478 bool TreePatternNode::isIsomorphicTo(const TreePatternNode *N) const {
479   if (N == this) return true;
480   if (N->isLeaf() != isLeaf() || getExtTypes() != N->getExtTypes() ||
481       getPredicateFn() != N->getPredicateFn() ||
482       getTransformFn() != N->getTransformFn())
483     return false;
484
485   if (isLeaf()) {
486     if (DefInit *DI = dynamic_cast<DefInit*>(getLeafValue()))
487       if (DefInit *NDI = dynamic_cast<DefInit*>(N->getLeafValue()))
488         return DI->getDef() == NDI->getDef();
489     return getLeafValue() == N->getLeafValue();
490   }
491   
492   if (N->getOperator() != getOperator() ||
493       N->getNumChildren() != getNumChildren()) return false;
494   for (unsigned i = 0, e = getNumChildren(); i != e; ++i)
495     if (!getChild(i)->isIsomorphicTo(N->getChild(i)))
496       return false;
497   return true;
498 }
499
500 /// clone - Make a copy of this tree and all of its children.
501 ///
502 TreePatternNode *TreePatternNode::clone() const {
503   TreePatternNode *New;
504   if (isLeaf()) {
505     New = new TreePatternNode(getLeafValue());
506   } else {
507     std::vector<TreePatternNode*> CChildren;
508     CChildren.reserve(Children.size());
509     for (unsigned i = 0, e = getNumChildren(); i != e; ++i)
510       CChildren.push_back(getChild(i)->clone());
511     New = new TreePatternNode(getOperator(), CChildren);
512   }
513   New->setName(getName());
514   New->setTypes(getExtTypes());
515   New->setPredicateFn(getPredicateFn());
516   New->setTransformFn(getTransformFn());
517   return New;
518 }
519
520 /// SubstituteFormalArguments - Replace the formal arguments in this tree
521 /// with actual values specified by ArgMap.
522 void TreePatternNode::
523 SubstituteFormalArguments(std::map<std::string, TreePatternNode*> &ArgMap) {
524   if (isLeaf()) return;
525   
526   for (unsigned i = 0, e = getNumChildren(); i != e; ++i) {
527     TreePatternNode *Child = getChild(i);
528     if (Child->isLeaf()) {
529       Init *Val = Child->getLeafValue();
530       if (dynamic_cast<DefInit*>(Val) &&
531           static_cast<DefInit*>(Val)->getDef()->getName() == "node") {
532         // We found a use of a formal argument, replace it with its value.
533         Child = ArgMap[Child->getName()];
534         assert(Child && "Couldn't find formal argument!");
535         setChild(i, Child);
536       }
537     } else {
538       getChild(i)->SubstituteFormalArguments(ArgMap);
539     }
540   }
541 }
542
543
544 /// InlinePatternFragments - If this pattern refers to any pattern
545 /// fragments, inline them into place, giving us a pattern without any
546 /// PatFrag references.
547 TreePatternNode *TreePatternNode::InlinePatternFragments(TreePattern &TP) {
548   if (isLeaf()) return this;  // nothing to do.
549   Record *Op = getOperator();
550   
551   if (!Op->isSubClassOf("PatFrag")) {
552     // Just recursively inline children nodes.
553     for (unsigned i = 0, e = getNumChildren(); i != e; ++i)
554       setChild(i, getChild(i)->InlinePatternFragments(TP));
555     return this;
556   }
557
558   // Otherwise, we found a reference to a fragment.  First, look up its
559   // TreePattern record.
560   TreePattern *Frag = TP.getDAGISelEmitter().getPatternFragment(Op);
561   
562   // Verify that we are passing the right number of operands.
563   if (Frag->getNumArgs() != Children.size())
564     TP.error("'" + Op->getName() + "' fragment requires " +
565              utostr(Frag->getNumArgs()) + " operands!");
566
567   TreePatternNode *FragTree = Frag->getOnlyTree()->clone();
568
569   // Resolve formal arguments to their actual value.
570   if (Frag->getNumArgs()) {
571     // Compute the map of formal to actual arguments.
572     std::map<std::string, TreePatternNode*> ArgMap;
573     for (unsigned i = 0, e = Frag->getNumArgs(); i != e; ++i)
574       ArgMap[Frag->getArgName(i)] = getChild(i)->InlinePatternFragments(TP);
575   
576     FragTree->SubstituteFormalArguments(ArgMap);
577   }
578   
579   FragTree->setName(getName());
580   FragTree->UpdateNodeType(getExtTypes(), TP);
581   
582   // Get a new copy of this fragment to stitch into here.
583   //delete this;    // FIXME: implement refcounting!
584   return FragTree;
585 }
586
587 /// getImplicitType - Check to see if the specified record has an implicit
588 /// type which should be applied to it.  This infer the type of register
589 /// references from the register file information, for example.
590 ///
591 static std::vector<unsigned char> getImplicitType(Record *R, bool NotRegisters,
592                                       TreePattern &TP) {
593   // Some common return values
594   std::vector<unsigned char> Unknown(1, MVT::isUnknown);
595   std::vector<unsigned char> Other(1, MVT::Other);
596
597   // Check to see if this is a register or a register class...
598   if (R->isSubClassOf("RegisterClass")) {
599     if (NotRegisters) 
600       return Unknown;
601     const CodeGenRegisterClass &RC = 
602       TP.getDAGISelEmitter().getTargetInfo().getRegisterClass(R);
603     return ConvertVTs(RC.getValueTypes());
604   } else if (R->isSubClassOf("PatFrag")) {
605     // Pattern fragment types will be resolved when they are inlined.
606     return Unknown;
607   } else if (R->isSubClassOf("Register")) {
608     if (NotRegisters) 
609       return Unknown;
610     const CodeGenTarget &T = TP.getDAGISelEmitter().getTargetInfo();
611     return T.getRegisterVTs(R);
612   } else if (R->isSubClassOf("ValueType") || R->isSubClassOf("CondCode")) {
613     // Using a VTSDNode or CondCodeSDNode.
614     return Other;
615   } else if (R->isSubClassOf("ComplexPattern")) {
616     if (NotRegisters) 
617       return Unknown;
618     std::vector<unsigned char>
619     ComplexPat(1, TP.getDAGISelEmitter().getComplexPattern(R).getValueType());
620     return ComplexPat;
621   } else if (R->getName() == "ptr_rc") {
622     Other[0] = MVT::iPTR;
623     return Other;
624   } else if (R->getName() == "node" || R->getName() == "srcvalue") {
625     // Placeholder.
626     return Unknown;
627   }
628   
629   TP.error("Unknown node flavor used in pattern: " + R->getName());
630   return Other;
631 }
632
633 /// ApplyTypeConstraints - Apply all of the type constraints relevent to
634 /// this node and its children in the tree.  This returns true if it makes a
635 /// change, false otherwise.  If a type contradiction is found, throw an
636 /// exception.
637 bool TreePatternNode::ApplyTypeConstraints(TreePattern &TP, bool NotRegisters) {
638   DAGISelEmitter &ISE = TP.getDAGISelEmitter();
639   if (isLeaf()) {
640     if (DefInit *DI = dynamic_cast<DefInit*>(getLeafValue())) {
641       // If it's a regclass or something else known, include the type.
642       return UpdateNodeType(getImplicitType(DI->getDef(), NotRegisters, TP),TP);
643     } else if (IntInit *II = dynamic_cast<IntInit*>(getLeafValue())) {
644       // Int inits are always integers. :)
645       bool MadeChange = UpdateNodeType(MVT::isInt, TP);
646       
647       if (hasTypeSet()) {
648         // At some point, it may make sense for this tree pattern to have
649         // multiple types.  Assert here that it does not, so we revisit this
650         // code when appropriate.
651         assert(getExtTypes().size() >= 1 && "TreePattern doesn't have a type!");
652         MVT::ValueType VT = getTypeNum(0);
653         for (unsigned i = 1, e = getExtTypes().size(); i != e; ++i)
654           assert(getTypeNum(i) == VT && "TreePattern has too many types!");
655         
656         VT = getTypeNum(0);
657         if (VT != MVT::iPTR) {
658           unsigned Size = MVT::getSizeInBits(VT);
659           // Make sure that the value is representable for this type.
660           if (Size < 32) {
661             int Val = (II->getValue() << (32-Size)) >> (32-Size);
662             if (Val != II->getValue())
663               TP.error("Sign-extended integer value '" + itostr(II->getValue())+
664                        "' is out of range for type '" + 
665                        getEnumName(getTypeNum(0)) + "'!");
666           }
667         }
668       }
669       
670       return MadeChange;
671     }
672     return false;
673   }
674   
675   // special handling for set, which isn't really an SDNode.
676   if (getOperator()->getName() == "set") {
677     assert (getNumChildren() == 2 && "Only handle 2 operand set's for now!");
678     bool MadeChange = getChild(0)->ApplyTypeConstraints(TP, NotRegisters);
679     MadeChange |= getChild(1)->ApplyTypeConstraints(TP, NotRegisters);
680     
681     // Types of operands must match.
682     MadeChange |= getChild(0)->UpdateNodeType(getChild(1)->getExtTypes(), TP);
683     MadeChange |= getChild(1)->UpdateNodeType(getChild(0)->getExtTypes(), TP);
684     MadeChange |= UpdateNodeType(MVT::isVoid, TP);
685     return MadeChange;
686   } else if (getOperator() == ISE.get_intrinsic_void_sdnode() ||
687              getOperator() == ISE.get_intrinsic_w_chain_sdnode() ||
688              getOperator() == ISE.get_intrinsic_wo_chain_sdnode()) {
689     unsigned IID = 
690     dynamic_cast<IntInit*>(getChild(0)->getLeafValue())->getValue();
691     const CodeGenIntrinsic &Int = ISE.getIntrinsicInfo(IID);
692     bool MadeChange = false;
693     
694     // Apply the result type to the node.
695     MadeChange = UpdateNodeType(Int.ArgVTs[0], TP);
696     
697     if (getNumChildren() != Int.ArgVTs.size())
698       TP.error("Intrinsic '" + Int.Name + "' expects " +
699                utostr(Int.ArgVTs.size()-1) + " operands, not " +
700                utostr(getNumChildren()-1) + " operands!");
701
702     // Apply type info to the intrinsic ID.
703     MadeChange |= getChild(0)->UpdateNodeType(MVT::iPTR, TP);
704     
705     for (unsigned i = 1, e = getNumChildren(); i != e; ++i) {
706       MVT::ValueType OpVT = Int.ArgVTs[i];
707       MadeChange |= getChild(i)->UpdateNodeType(OpVT, TP);
708       MadeChange |= getChild(i)->ApplyTypeConstraints(TP, NotRegisters);
709     }
710     return MadeChange;
711   } else if (getOperator()->isSubClassOf("SDNode")) {
712     const SDNodeInfo &NI = ISE.getSDNodeInfo(getOperator());
713     
714     bool MadeChange = NI.ApplyTypeConstraints(this, TP);
715     for (unsigned i = 0, e = getNumChildren(); i != e; ++i)
716       MadeChange |= getChild(i)->ApplyTypeConstraints(TP, NotRegisters);
717     // Branch, etc. do not produce results and top-level forms in instr pattern
718     // must have void types.
719     if (NI.getNumResults() == 0)
720       MadeChange |= UpdateNodeType(MVT::isVoid, TP);
721     
722     // If this is a vector_shuffle operation, apply types to the build_vector
723     // operation.  The types of the integers don't matter, but this ensures they
724     // won't get checked.
725     if (getOperator()->getName() == "vector_shuffle" &&
726         getChild(2)->getOperator()->getName() == "build_vector") {
727       TreePatternNode *BV = getChild(2);
728       const std::vector<MVT::ValueType> &LegalVTs
729         = ISE.getTargetInfo().getLegalValueTypes();
730       MVT::ValueType LegalIntVT = MVT::Other;
731       for (unsigned i = 0, e = LegalVTs.size(); i != e; ++i)
732         if (MVT::isInteger(LegalVTs[i]) && !MVT::isVector(LegalVTs[i])) {
733           LegalIntVT = LegalVTs[i];
734           break;
735         }
736       assert(LegalIntVT != MVT::Other && "No legal integer VT?");
737             
738       for (unsigned i = 0, e = BV->getNumChildren(); i != e; ++i)
739         MadeChange |= BV->getChild(i)->UpdateNodeType(LegalIntVT, TP);
740     }
741     return MadeChange;  
742   } else if (getOperator()->isSubClassOf("Instruction")) {
743     const DAGInstruction &Inst = ISE.getInstruction(getOperator());
744     bool MadeChange = false;
745     unsigned NumResults = Inst.getNumResults();
746     
747     assert(NumResults <= 1 &&
748            "Only supports zero or one result instrs!");
749
750     CodeGenInstruction &InstInfo =
751       ISE.getTargetInfo().getInstruction(getOperator()->getName());
752     // Apply the result type to the node
753     if (NumResults == 0 || InstInfo.noResults) { // FIXME: temporary hack.
754       MadeChange = UpdateNodeType(MVT::isVoid, TP);
755     } else {
756       Record *ResultNode = Inst.getResult(0);
757       
758       if (ResultNode->getName() == "ptr_rc") {
759         std::vector<unsigned char> VT;
760         VT.push_back(MVT::iPTR);
761         MadeChange = UpdateNodeType(VT, TP);
762       } else {
763         assert(ResultNode->isSubClassOf("RegisterClass") &&
764                "Operands should be register classes!");
765
766         const CodeGenRegisterClass &RC = 
767           ISE.getTargetInfo().getRegisterClass(ResultNode);
768         MadeChange = UpdateNodeType(ConvertVTs(RC.getValueTypes()), TP);
769       }
770     }
771
772     unsigned ChildNo = 0;
773     for (unsigned i = 0, e = Inst.getNumOperands(); i != e; ++i) {
774       Record *OperandNode = Inst.getOperand(i);
775       
776       // If the instruction expects a predicate operand, we codegen this by
777       // setting the predicate to it's "execute always" value.
778       if (OperandNode->isSubClassOf("PredicateOperand"))
779         continue;
780        
781       // Verify that we didn't run out of provided operands.
782       if (ChildNo >= getNumChildren())
783         TP.error("Instruction '" + getOperator()->getName() +
784                  "' expects more operands than were provided.");
785       
786       MVT::ValueType VT;
787       TreePatternNode *Child = getChild(ChildNo++);
788       if (OperandNode->isSubClassOf("RegisterClass")) {
789         const CodeGenRegisterClass &RC = 
790           ISE.getTargetInfo().getRegisterClass(OperandNode);
791         MadeChange |= Child->UpdateNodeType(ConvertVTs(RC.getValueTypes()), TP);
792       } else if (OperandNode->isSubClassOf("Operand")) {
793         VT = getValueType(OperandNode->getValueAsDef("Type"));
794         MadeChange |= Child->UpdateNodeType(VT, TP);
795       } else if (OperandNode->getName() == "ptr_rc") {
796         MadeChange |= Child->UpdateNodeType(MVT::iPTR, TP);
797       } else {
798         assert(0 && "Unknown operand type!");
799         abort();
800       }
801       MadeChange |= Child->ApplyTypeConstraints(TP, NotRegisters);
802     }
803     
804     if (ChildNo != getNumChildren())
805       TP.error("Instruction '" + getOperator()->getName() +
806                "' was provided too many operands!");
807     
808     return MadeChange;
809   } else {
810     assert(getOperator()->isSubClassOf("SDNodeXForm") && "Unknown node type!");
811     
812     // Node transforms always take one operand.
813     if (getNumChildren() != 1)
814       TP.error("Node transform '" + getOperator()->getName() +
815                "' requires one operand!");
816
817     // If either the output or input of the xform does not have exact
818     // type info. We assume they must be the same. Otherwise, it is perfectly
819     // legal to transform from one type to a completely different type.
820     if (!hasTypeSet() || !getChild(0)->hasTypeSet()) {
821       bool MadeChange = UpdateNodeType(getChild(0)->getExtTypes(), TP);
822       MadeChange |= getChild(0)->UpdateNodeType(getExtTypes(), TP);
823       return MadeChange;
824     }
825     return false;
826   }
827 }
828
829 /// OnlyOnRHSOfCommutative - Return true if this value is only allowed on the
830 /// RHS of a commutative operation, not the on LHS.
831 static bool OnlyOnRHSOfCommutative(TreePatternNode *N) {
832   if (!N->isLeaf() && N->getOperator()->getName() == "imm")
833     return true;
834   if (N->isLeaf() && dynamic_cast<IntInit*>(N->getLeafValue()))
835     return true;
836   return false;
837 }
838
839
840 /// canPatternMatch - If it is impossible for this pattern to match on this
841 /// target, fill in Reason and return false.  Otherwise, return true.  This is
842 /// used as a santity check for .td files (to prevent people from writing stuff
843 /// that can never possibly work), and to prevent the pattern permuter from
844 /// generating stuff that is useless.
845 bool TreePatternNode::canPatternMatch(std::string &Reason, DAGISelEmitter &ISE){
846   if (isLeaf()) return true;
847
848   for (unsigned i = 0, e = getNumChildren(); i != e; ++i)
849     if (!getChild(i)->canPatternMatch(Reason, ISE))
850       return false;
851
852   // If this is an intrinsic, handle cases that would make it not match.  For
853   // example, if an operand is required to be an immediate.
854   if (getOperator()->isSubClassOf("Intrinsic")) {
855     // TODO:
856     return true;
857   }
858   
859   // If this node is a commutative operator, check that the LHS isn't an
860   // immediate.
861   const SDNodeInfo &NodeInfo = ISE.getSDNodeInfo(getOperator());
862   if (NodeInfo.hasProperty(SDNPCommutative)) {
863     // Scan all of the operands of the node and make sure that only the last one
864     // is a constant node, unless the RHS also is.
865     if (!OnlyOnRHSOfCommutative(getChild(getNumChildren()-1))) {
866       for (unsigned i = 0, e = getNumChildren()-1; i != e; ++i)
867         if (OnlyOnRHSOfCommutative(getChild(i))) {
868           Reason="Immediate value must be on the RHS of commutative operators!";
869           return false;
870         }
871     }
872   }
873   
874   return true;
875 }
876
877 //===----------------------------------------------------------------------===//
878 // TreePattern implementation
879 //
880
881 TreePattern::TreePattern(Record *TheRec, ListInit *RawPat, bool isInput,
882                          DAGISelEmitter &ise) : TheRecord(TheRec), ISE(ise) {
883    isInputPattern = isInput;
884    for (unsigned i = 0, e = RawPat->getSize(); i != e; ++i)
885      Trees.push_back(ParseTreePattern((DagInit*)RawPat->getElement(i)));
886 }
887
888 TreePattern::TreePattern(Record *TheRec, DagInit *Pat, bool isInput,
889                          DAGISelEmitter &ise) : TheRecord(TheRec), ISE(ise) {
890   isInputPattern = isInput;
891   Trees.push_back(ParseTreePattern(Pat));
892 }
893
894 TreePattern::TreePattern(Record *TheRec, TreePatternNode *Pat, bool isInput,
895                          DAGISelEmitter &ise) : TheRecord(TheRec), ISE(ise) {
896   isInputPattern = isInput;
897   Trees.push_back(Pat);
898 }
899
900
901
902 void TreePattern::error(const std::string &Msg) const {
903   dump();
904   throw "In " + TheRecord->getName() + ": " + Msg;
905 }
906
907 TreePatternNode *TreePattern::ParseTreePattern(DagInit *Dag) {
908   DefInit *OpDef = dynamic_cast<DefInit*>(Dag->getOperator());
909   if (!OpDef) error("Pattern has unexpected operator type!");
910   Record *Operator = OpDef->getDef();
911   
912   if (Operator->isSubClassOf("ValueType")) {
913     // If the operator is a ValueType, then this must be "type cast" of a leaf
914     // node.
915     if (Dag->getNumArgs() != 1)
916       error("Type cast only takes one operand!");
917     
918     Init *Arg = Dag->getArg(0);
919     TreePatternNode *New;
920     if (DefInit *DI = dynamic_cast<DefInit*>(Arg)) {
921       Record *R = DI->getDef();
922       if (R->isSubClassOf("SDNode") || R->isSubClassOf("PatFrag")) {
923         Dag->setArg(0, new DagInit(DI,
924                                 std::vector<std::pair<Init*, std::string> >()));
925         return ParseTreePattern(Dag);
926       }
927       New = new TreePatternNode(DI);
928     } else if (DagInit *DI = dynamic_cast<DagInit*>(Arg)) {
929       New = ParseTreePattern(DI);
930     } else if (IntInit *II = dynamic_cast<IntInit*>(Arg)) {
931       New = new TreePatternNode(II);
932       if (!Dag->getArgName(0).empty())
933         error("Constant int argument should not have a name!");
934     } else if (BitsInit *BI = dynamic_cast<BitsInit*>(Arg)) {
935       // Turn this into an IntInit.
936       Init *II = BI->convertInitializerTo(new IntRecTy());
937       if (II == 0 || !dynamic_cast<IntInit*>(II))
938         error("Bits value must be constants!");
939       
940       New = new TreePatternNode(dynamic_cast<IntInit*>(II));
941       if (!Dag->getArgName(0).empty())
942         error("Constant int argument should not have a name!");
943     } else {
944       Arg->dump();
945       error("Unknown leaf value for tree pattern!");
946       return 0;
947     }
948     
949     // Apply the type cast.
950     New->UpdateNodeType(getValueType(Operator), *this);
951     New->setName(Dag->getArgName(0));
952     return New;
953   }
954   
955   // Verify that this is something that makes sense for an operator.
956   if (!Operator->isSubClassOf("PatFrag") && !Operator->isSubClassOf("SDNode") &&
957       !Operator->isSubClassOf("Instruction") && 
958       !Operator->isSubClassOf("SDNodeXForm") &&
959       !Operator->isSubClassOf("Intrinsic") &&
960       Operator->getName() != "set")
961     error("Unrecognized node '" + Operator->getName() + "'!");
962   
963   //  Check to see if this is something that is illegal in an input pattern.
964   if (isInputPattern && (Operator->isSubClassOf("Instruction") ||
965                          Operator->isSubClassOf("SDNodeXForm")))
966     error("Cannot use '" + Operator->getName() + "' in an input pattern!");
967   
968   std::vector<TreePatternNode*> Children;
969   
970   for (unsigned i = 0, e = Dag->getNumArgs(); i != e; ++i) {
971     Init *Arg = Dag->getArg(i);
972     if (DagInit *DI = dynamic_cast<DagInit*>(Arg)) {
973       Children.push_back(ParseTreePattern(DI));
974       if (Children.back()->getName().empty())
975         Children.back()->setName(Dag->getArgName(i));
976     } else if (DefInit *DefI = dynamic_cast<DefInit*>(Arg)) {
977       Record *R = DefI->getDef();
978       // Direct reference to a leaf DagNode or PatFrag?  Turn it into a
979       // TreePatternNode if its own.
980       if (R->isSubClassOf("SDNode") || R->isSubClassOf("PatFrag")) {
981         Dag->setArg(i, new DagInit(DefI,
982                               std::vector<std::pair<Init*, std::string> >()));
983         --i;  // Revisit this node...
984       } else {
985         TreePatternNode *Node = new TreePatternNode(DefI);
986         Node->setName(Dag->getArgName(i));
987         Children.push_back(Node);
988         
989         // Input argument?
990         if (R->getName() == "node") {
991           if (Dag->getArgName(i).empty())
992             error("'node' argument requires a name to match with operand list");
993           Args.push_back(Dag->getArgName(i));
994         }
995       }
996     } else if (IntInit *II = dynamic_cast<IntInit*>(Arg)) {
997       TreePatternNode *Node = new TreePatternNode(II);
998       if (!Dag->getArgName(i).empty())
999         error("Constant int argument should not have a name!");
1000       Children.push_back(Node);
1001     } else if (BitsInit *BI = dynamic_cast<BitsInit*>(Arg)) {
1002       // Turn this into an IntInit.
1003       Init *II = BI->convertInitializerTo(new IntRecTy());
1004       if (II == 0 || !dynamic_cast<IntInit*>(II))
1005         error("Bits value must be constants!");
1006       
1007       TreePatternNode *Node = new TreePatternNode(dynamic_cast<IntInit*>(II));
1008       if (!Dag->getArgName(i).empty())
1009         error("Constant int argument should not have a name!");
1010       Children.push_back(Node);
1011     } else {
1012       std::cerr << '"';
1013       Arg->dump();
1014       std::cerr << "\": ";
1015       error("Unknown leaf value for tree pattern!");
1016     }
1017   }
1018   
1019   // If the operator is an intrinsic, then this is just syntactic sugar for for
1020   // (intrinsic_* <number>, ..children..).  Pick the right intrinsic node, and 
1021   // convert the intrinsic name to a number.
1022   if (Operator->isSubClassOf("Intrinsic")) {
1023     const CodeGenIntrinsic &Int = getDAGISelEmitter().getIntrinsic(Operator);
1024     unsigned IID = getDAGISelEmitter().getIntrinsicID(Operator)+1;
1025
1026     // If this intrinsic returns void, it must have side-effects and thus a
1027     // chain.
1028     if (Int.ArgVTs[0] == MVT::isVoid) {
1029       Operator = getDAGISelEmitter().get_intrinsic_void_sdnode();
1030     } else if (Int.ModRef != CodeGenIntrinsic::NoMem) {
1031       // Has side-effects, requires chain.
1032       Operator = getDAGISelEmitter().get_intrinsic_w_chain_sdnode();
1033     } else {
1034       // Otherwise, no chain.
1035       Operator = getDAGISelEmitter().get_intrinsic_wo_chain_sdnode();
1036     }
1037     
1038     TreePatternNode *IIDNode = new TreePatternNode(new IntInit(IID));
1039     Children.insert(Children.begin(), IIDNode);
1040   }
1041   
1042   return new TreePatternNode(Operator, Children);
1043 }
1044
1045 /// InferAllTypes - Infer/propagate as many types throughout the expression
1046 /// patterns as possible.  Return true if all types are infered, false
1047 /// otherwise.  Throw an exception if a type contradiction is found.
1048 bool TreePattern::InferAllTypes() {
1049   bool MadeChange = true;
1050   while (MadeChange) {
1051     MadeChange = false;
1052     for (unsigned i = 0, e = Trees.size(); i != e; ++i)
1053       MadeChange |= Trees[i]->ApplyTypeConstraints(*this, false);
1054   }
1055   
1056   bool HasUnresolvedTypes = false;
1057   for (unsigned i = 0, e = Trees.size(); i != e; ++i)
1058     HasUnresolvedTypes |= Trees[i]->ContainsUnresolvedType();
1059   return !HasUnresolvedTypes;
1060 }
1061
1062 void TreePattern::print(std::ostream &OS) const {
1063   OS << getRecord()->getName();
1064   if (!Args.empty()) {
1065     OS << "(" << Args[0];
1066     for (unsigned i = 1, e = Args.size(); i != e; ++i)
1067       OS << ", " << Args[i];
1068     OS << ")";
1069   }
1070   OS << ": ";
1071   
1072   if (Trees.size() > 1)
1073     OS << "[\n";
1074   for (unsigned i = 0, e = Trees.size(); i != e; ++i) {
1075     OS << "\t";
1076     Trees[i]->print(OS);
1077     OS << "\n";
1078   }
1079
1080   if (Trees.size() > 1)
1081     OS << "]\n";
1082 }
1083
1084 void TreePattern::dump() const { print(std::cerr); }
1085
1086
1087
1088 //===----------------------------------------------------------------------===//
1089 // DAGISelEmitter implementation
1090 //
1091
1092 // Parse all of the SDNode definitions for the target, populating SDNodes.
1093 void DAGISelEmitter::ParseNodeInfo() {
1094   std::vector<Record*> Nodes = Records.getAllDerivedDefinitions("SDNode");
1095   while (!Nodes.empty()) {
1096     SDNodes.insert(std::make_pair(Nodes.back(), Nodes.back()));
1097     Nodes.pop_back();
1098   }
1099
1100   // Get the buildin intrinsic nodes.
1101   intrinsic_void_sdnode     = getSDNodeNamed("intrinsic_void");
1102   intrinsic_w_chain_sdnode  = getSDNodeNamed("intrinsic_w_chain");
1103   intrinsic_wo_chain_sdnode = getSDNodeNamed("intrinsic_wo_chain");
1104 }
1105
1106 /// ParseNodeTransforms - Parse all SDNodeXForm instances into the SDNodeXForms
1107 /// map, and emit them to the file as functions.
1108 void DAGISelEmitter::ParseNodeTransforms(std::ostream &OS) {
1109   OS << "\n// Node transformations.\n";
1110   std::vector<Record*> Xforms = Records.getAllDerivedDefinitions("SDNodeXForm");
1111   while (!Xforms.empty()) {
1112     Record *XFormNode = Xforms.back();
1113     Record *SDNode = XFormNode->getValueAsDef("Opcode");
1114     std::string Code = XFormNode->getValueAsCode("XFormFunction");
1115     SDNodeXForms.insert(std::make_pair(XFormNode,
1116                                        std::make_pair(SDNode, Code)));
1117
1118     if (!Code.empty()) {
1119       std::string ClassName = getSDNodeInfo(SDNode).getSDClassName();
1120       const char *C2 = ClassName == "SDNode" ? "N" : "inN";
1121
1122       OS << "inline SDOperand Transform_" << XFormNode->getName()
1123          << "(SDNode *" << C2 << ") {\n";
1124       if (ClassName != "SDNode")
1125         OS << "  " << ClassName << " *N = cast<" << ClassName << ">(inN);\n";
1126       OS << Code << "\n}\n";
1127     }
1128
1129     Xforms.pop_back();
1130   }
1131 }
1132
1133 void DAGISelEmitter::ParseComplexPatterns() {
1134   std::vector<Record*> AMs = Records.getAllDerivedDefinitions("ComplexPattern");
1135   while (!AMs.empty()) {
1136     ComplexPatterns.insert(std::make_pair(AMs.back(), AMs.back()));
1137     AMs.pop_back();
1138   }
1139 }
1140
1141
1142 /// ParsePatternFragments - Parse all of the PatFrag definitions in the .td
1143 /// file, building up the PatternFragments map.  After we've collected them all,
1144 /// inline fragments together as necessary, so that there are no references left
1145 /// inside a pattern fragment to a pattern fragment.
1146 ///
1147 /// This also emits all of the predicate functions to the output file.
1148 ///
1149 void DAGISelEmitter::ParsePatternFragments(std::ostream &OS) {
1150   std::vector<Record*> Fragments = Records.getAllDerivedDefinitions("PatFrag");
1151   
1152   // First step, parse all of the fragments and emit predicate functions.
1153   OS << "\n// Predicate functions.\n";
1154   for (unsigned i = 0, e = Fragments.size(); i != e; ++i) {
1155     DagInit *Tree = Fragments[i]->getValueAsDag("Fragment");
1156     TreePattern *P = new TreePattern(Fragments[i], Tree, true, *this);
1157     PatternFragments[Fragments[i]] = P;
1158     
1159     // Validate the argument list, converting it to map, to discard duplicates.
1160     std::vector<std::string> &Args = P->getArgList();
1161     std::set<std::string> OperandsMap(Args.begin(), Args.end());
1162     
1163     if (OperandsMap.count(""))
1164       P->error("Cannot have unnamed 'node' values in pattern fragment!");
1165     
1166     // Parse the operands list.
1167     DagInit *OpsList = Fragments[i]->getValueAsDag("Operands");
1168     DefInit *OpsOp = dynamic_cast<DefInit*>(OpsList->getOperator());
1169     if (!OpsOp || OpsOp->getDef()->getName() != "ops")
1170       P->error("Operands list should start with '(ops ... '!");
1171     
1172     // Copy over the arguments.       
1173     Args.clear();
1174     for (unsigned j = 0, e = OpsList->getNumArgs(); j != e; ++j) {
1175       if (!dynamic_cast<DefInit*>(OpsList->getArg(j)) ||
1176           static_cast<DefInit*>(OpsList->getArg(j))->
1177           getDef()->getName() != "node")
1178         P->error("Operands list should all be 'node' values.");
1179       if (OpsList->getArgName(j).empty())
1180         P->error("Operands list should have names for each operand!");
1181       if (!OperandsMap.count(OpsList->getArgName(j)))
1182         P->error("'" + OpsList->getArgName(j) +
1183                  "' does not occur in pattern or was multiply specified!");
1184       OperandsMap.erase(OpsList->getArgName(j));
1185       Args.push_back(OpsList->getArgName(j));
1186     }
1187     
1188     if (!OperandsMap.empty())
1189       P->error("Operands list does not contain an entry for operand '" +
1190                *OperandsMap.begin() + "'!");
1191
1192     // If there is a code init for this fragment, emit the predicate code and
1193     // keep track of the fact that this fragment uses it.
1194     std::string Code = Fragments[i]->getValueAsCode("Predicate");
1195     if (!Code.empty()) {
1196       if (P->getOnlyTree()->isLeaf())
1197         OS << "inline bool Predicate_" << Fragments[i]->getName()
1198            << "(SDNode *N) {\n";
1199       else {
1200         std::string ClassName =
1201           getSDNodeInfo(P->getOnlyTree()->getOperator()).getSDClassName();
1202         const char *C2 = ClassName == "SDNode" ? "N" : "inN";
1203       
1204         OS << "inline bool Predicate_" << Fragments[i]->getName()
1205            << "(SDNode *" << C2 << ") {\n";
1206         if (ClassName != "SDNode")
1207           OS << "  " << ClassName << " *N = cast<" << ClassName << ">(inN);\n";
1208       }
1209       OS << Code << "\n}\n";
1210       P->getOnlyTree()->setPredicateFn("Predicate_"+Fragments[i]->getName());
1211     }
1212     
1213     // If there is a node transformation corresponding to this, keep track of
1214     // it.
1215     Record *Transform = Fragments[i]->getValueAsDef("OperandTransform");
1216     if (!getSDNodeTransform(Transform).second.empty())    // not noop xform?
1217       P->getOnlyTree()->setTransformFn(Transform);
1218   }
1219   
1220   OS << "\n\n";
1221
1222   // Now that we've parsed all of the tree fragments, do a closure on them so
1223   // that there are not references to PatFrags left inside of them.
1224   for (std::map<Record*, TreePattern*>::iterator I = PatternFragments.begin(),
1225        E = PatternFragments.end(); I != E; ++I) {
1226     TreePattern *ThePat = I->second;
1227     ThePat->InlinePatternFragments();
1228         
1229     // Infer as many types as possible.  Don't worry about it if we don't infer
1230     // all of them, some may depend on the inputs of the pattern.
1231     try {
1232       ThePat->InferAllTypes();
1233     } catch (...) {
1234       // If this pattern fragment is not supported by this target (no types can
1235       // satisfy its constraints), just ignore it.  If the bogus pattern is
1236       // actually used by instructions, the type consistency error will be
1237       // reported there.
1238     }
1239     
1240     // If debugging, print out the pattern fragment result.
1241     DEBUG(ThePat->dump());
1242   }
1243 }
1244
1245 void DAGISelEmitter::ParsePredicateOperands() {
1246   std::vector<Record*> PredOps =
1247     Records.getAllDerivedDefinitions("PredicateOperand");
1248
1249   // Find some SDNode.
1250   assert(!SDNodes.empty() && "No SDNodes parsed?");
1251   Init *SomeSDNode = new DefInit(SDNodes.begin()->first);
1252   
1253   for (unsigned i = 0, e = PredOps.size(); i != e; ++i) {
1254     DagInit *AlwaysInfo = PredOps[i]->getValueAsDag("ExecuteAlways");
1255     
1256     // Clone the AlwaysInfo dag node, changing the operator from 'ops' to
1257     // SomeSDnode so that we can parse this.
1258     std::vector<std::pair<Init*, std::string> > Ops;
1259     for (unsigned op = 0, e = AlwaysInfo->getNumArgs(); op != e; ++op)
1260       Ops.push_back(std::make_pair(AlwaysInfo->getArg(op),
1261                                    AlwaysInfo->getArgName(op)));
1262     DagInit *DI = new DagInit(SomeSDNode, Ops);
1263     
1264     // Create a TreePattern to parse this.
1265     TreePattern P(PredOps[i], DI, false, *this);
1266     assert(P.getNumTrees() == 1 && "This ctor can only produce one tree!");
1267
1268     // Copy the operands over into a DAGPredicateOperand.
1269     DAGPredicateOperand PredOpInfo;
1270     
1271     TreePatternNode *T = P.getTree(0);
1272     for (unsigned op = 0, e = T->getNumChildren(); op != e; ++op) {
1273       TreePatternNode *TPN = T->getChild(op);
1274       while (TPN->ApplyTypeConstraints(P, false))
1275         /* Resolve all types */;
1276       
1277       if (TPN->ContainsUnresolvedType())
1278         throw "Value #" + utostr(i) + " of PredicateOperand '" +
1279               PredOps[i]->getName() + "' doesn't have a concrete type!";
1280       
1281       PredOpInfo.AlwaysOps.push_back(TPN);
1282     }
1283
1284     // Insert it into the PredicateOperands map so we can find it later.
1285     PredicateOperands[PredOps[i]] = PredOpInfo;
1286   }
1287 }
1288
1289 /// HandleUse - Given "Pat" a leaf in the pattern, check to see if it is an
1290 /// instruction input.  Return true if this is a real use.
1291 static bool HandleUse(TreePattern *I, TreePatternNode *Pat,
1292                       std::map<std::string, TreePatternNode*> &InstInputs,
1293                       std::vector<Record*> &InstImpInputs) {
1294   // No name -> not interesting.
1295   if (Pat->getName().empty()) {
1296     if (Pat->isLeaf()) {
1297       DefInit *DI = dynamic_cast<DefInit*>(Pat->getLeafValue());
1298       if (DI && DI->getDef()->isSubClassOf("RegisterClass"))
1299         I->error("Input " + DI->getDef()->getName() + " must be named!");
1300       else if (DI && DI->getDef()->isSubClassOf("Register")) 
1301         InstImpInputs.push_back(DI->getDef());
1302     }
1303     return false;
1304   }
1305
1306   Record *Rec;
1307   if (Pat->isLeaf()) {
1308     DefInit *DI = dynamic_cast<DefInit*>(Pat->getLeafValue());
1309     if (!DI) I->error("Input $" + Pat->getName() + " must be an identifier!");
1310     Rec = DI->getDef();
1311   } else {
1312     assert(Pat->getNumChildren() == 0 && "can't be a use with children!");
1313     Rec = Pat->getOperator();
1314   }
1315
1316   // SRCVALUE nodes are ignored.
1317   if (Rec->getName() == "srcvalue")
1318     return false;
1319
1320   TreePatternNode *&Slot = InstInputs[Pat->getName()];
1321   if (!Slot) {
1322     Slot = Pat;
1323   } else {
1324     Record *SlotRec;
1325     if (Slot->isLeaf()) {
1326       SlotRec = dynamic_cast<DefInit*>(Slot->getLeafValue())->getDef();
1327     } else {
1328       assert(Slot->getNumChildren() == 0 && "can't be a use with children!");
1329       SlotRec = Slot->getOperator();
1330     }
1331     
1332     // Ensure that the inputs agree if we've already seen this input.
1333     if (Rec != SlotRec)
1334       I->error("All $" + Pat->getName() + " inputs must agree with each other");
1335     if (Slot->getExtTypes() != Pat->getExtTypes())
1336       I->error("All $" + Pat->getName() + " inputs must agree with each other");
1337   }
1338   return true;
1339 }
1340
1341 /// FindPatternInputsAndOutputs - Scan the specified TreePatternNode (which is
1342 /// part of "I", the instruction), computing the set of inputs and outputs of
1343 /// the pattern.  Report errors if we see anything naughty.
1344 void DAGISelEmitter::
1345 FindPatternInputsAndOutputs(TreePattern *I, TreePatternNode *Pat,
1346                             std::map<std::string, TreePatternNode*> &InstInputs,
1347                             std::map<std::string, TreePatternNode*>&InstResults,
1348                             std::vector<Record*> &InstImpInputs,
1349                             std::vector<Record*> &InstImpResults) {
1350   if (Pat->isLeaf()) {
1351     bool isUse = HandleUse(I, Pat, InstInputs, InstImpInputs);
1352     if (!isUse && Pat->getTransformFn())
1353       I->error("Cannot specify a transform function for a non-input value!");
1354     return;
1355   } else if (Pat->getOperator()->getName() != "set") {
1356     // If this is not a set, verify that the children nodes are not void typed,
1357     // and recurse.
1358     for (unsigned i = 0, e = Pat->getNumChildren(); i != e; ++i) {
1359       if (Pat->getChild(i)->getExtTypeNum(0) == MVT::isVoid)
1360         I->error("Cannot have void nodes inside of patterns!");
1361       FindPatternInputsAndOutputs(I, Pat->getChild(i), InstInputs, InstResults,
1362                                   InstImpInputs, InstImpResults);
1363     }
1364     
1365     // If this is a non-leaf node with no children, treat it basically as if
1366     // it were a leaf.  This handles nodes like (imm).
1367     bool isUse = false;
1368     if (Pat->getNumChildren() == 0)
1369       isUse = HandleUse(I, Pat, InstInputs, InstImpInputs);
1370     
1371     if (!isUse && Pat->getTransformFn())
1372       I->error("Cannot specify a transform function for a non-input value!");
1373     return;
1374   } 
1375   
1376   // Otherwise, this is a set, validate and collect instruction results.
1377   if (Pat->getNumChildren() == 0)
1378     I->error("set requires operands!");
1379   else if (Pat->getNumChildren() & 1)
1380     I->error("set requires an even number of operands");
1381   
1382   if (Pat->getTransformFn())
1383     I->error("Cannot specify a transform function on a set node!");
1384   
1385   // Check the set destinations.
1386   unsigned NumValues = Pat->getNumChildren()/2;
1387   for (unsigned i = 0; i != NumValues; ++i) {
1388     TreePatternNode *Dest = Pat->getChild(i);
1389     if (!Dest->isLeaf())
1390       I->error("set destination should be a register!");
1391     
1392     DefInit *Val = dynamic_cast<DefInit*>(Dest->getLeafValue());
1393     if (!Val)
1394       I->error("set destination should be a register!");
1395
1396     if (Val->getDef()->isSubClassOf("RegisterClass") ||
1397         Val->getDef()->getName() == "ptr_rc") {
1398       if (Dest->getName().empty())
1399         I->error("set destination must have a name!");
1400       if (InstResults.count(Dest->getName()))
1401         I->error("cannot set '" + Dest->getName() +"' multiple times");
1402       InstResults[Dest->getName()] = Dest;
1403     } else if (Val->getDef()->isSubClassOf("Register")) {
1404       InstImpResults.push_back(Val->getDef());
1405     } else {
1406       I->error("set destination should be a register!");
1407     }
1408     
1409     // Verify and collect info from the computation.
1410     FindPatternInputsAndOutputs(I, Pat->getChild(i+NumValues),
1411                                 InstInputs, InstResults,
1412                                 InstImpInputs, InstImpResults);
1413   }
1414 }
1415
1416 /// ParseInstructions - Parse all of the instructions, inlining and resolving
1417 /// any fragments involved.  This populates the Instructions list with fully
1418 /// resolved instructions.
1419 void DAGISelEmitter::ParseInstructions() {
1420   std::vector<Record*> Instrs = Records.getAllDerivedDefinitions("Instruction");
1421   
1422   for (unsigned i = 0, e = Instrs.size(); i != e; ++i) {
1423     ListInit *LI = 0;
1424     
1425     if (dynamic_cast<ListInit*>(Instrs[i]->getValueInit("Pattern")))
1426       LI = Instrs[i]->getValueAsListInit("Pattern");
1427     
1428     // If there is no pattern, only collect minimal information about the
1429     // instruction for its operand list.  We have to assume that there is one
1430     // result, as we have no detailed info.
1431     if (!LI || LI->getSize() == 0) {
1432       std::vector<Record*> Results;
1433       std::vector<Record*> Operands;
1434       
1435       CodeGenInstruction &InstInfo =Target.getInstruction(Instrs[i]->getName());
1436
1437       if (InstInfo.OperandList.size() != 0) {
1438         // FIXME: temporary hack...
1439         if (InstInfo.noResults) {
1440           // These produce no results
1441           for (unsigned j = 0, e = InstInfo.OperandList.size(); j < e; ++j)
1442             Operands.push_back(InstInfo.OperandList[j].Rec);
1443         } else {
1444           // Assume the first operand is the result.
1445           Results.push_back(InstInfo.OperandList[0].Rec);
1446       
1447           // The rest are inputs.
1448           for (unsigned j = 1, e = InstInfo.OperandList.size(); j < e; ++j)
1449             Operands.push_back(InstInfo.OperandList[j].Rec);
1450         }
1451       }
1452       
1453       // Create and insert the instruction.
1454       std::vector<Record*> ImpResults;
1455       std::vector<Record*> ImpOperands;
1456       Instructions.insert(std::make_pair(Instrs[i], 
1457                           DAGInstruction(0, Results, Operands, ImpResults,
1458                                          ImpOperands)));
1459       continue;  // no pattern.
1460     }
1461     
1462     // Parse the instruction.
1463     TreePattern *I = new TreePattern(Instrs[i], LI, true, *this);
1464     // Inline pattern fragments into it.
1465     I->InlinePatternFragments();
1466     
1467     // Infer as many types as possible.  If we cannot infer all of them, we can
1468     // never do anything with this instruction pattern: report it to the user.
1469     if (!I->InferAllTypes())
1470       I->error("Could not infer all types in pattern!");
1471     
1472     // InstInputs - Keep track of all of the inputs of the instruction, along 
1473     // with the record they are declared as.
1474     std::map<std::string, TreePatternNode*> InstInputs;
1475     
1476     // InstResults - Keep track of all the virtual registers that are 'set'
1477     // in the instruction, including what reg class they are.
1478     std::map<std::string, TreePatternNode*> InstResults;
1479
1480     std::vector<Record*> InstImpInputs;
1481     std::vector<Record*> InstImpResults;
1482     
1483     // Verify that the top-level forms in the instruction are of void type, and
1484     // fill in the InstResults map.
1485     for (unsigned j = 0, e = I->getNumTrees(); j != e; ++j) {
1486       TreePatternNode *Pat = I->getTree(j);
1487       if (Pat->getExtTypeNum(0) != MVT::isVoid)
1488         I->error("Top-level forms in instruction pattern should have"
1489                  " void types");
1490
1491       // Find inputs and outputs, and verify the structure of the uses/defs.
1492       FindPatternInputsAndOutputs(I, Pat, InstInputs, InstResults,
1493                                   InstImpInputs, InstImpResults);
1494     }
1495
1496     // Now that we have inputs and outputs of the pattern, inspect the operands
1497     // list for the instruction.  This determines the order that operands are
1498     // added to the machine instruction the node corresponds to.
1499     unsigned NumResults = InstResults.size();
1500
1501     // Parse the operands list from the (ops) list, validating it.
1502     std::vector<std::string> &Args = I->getArgList();
1503     assert(Args.empty() && "Args list should still be empty here!");
1504     CodeGenInstruction &CGI = Target.getInstruction(Instrs[i]->getName());
1505
1506     // Check that all of the results occur first in the list.
1507     std::vector<Record*> Results;
1508     TreePatternNode *Res0Node = NULL;
1509     for (unsigned i = 0; i != NumResults; ++i) {
1510       if (i == CGI.OperandList.size())
1511         I->error("'" + InstResults.begin()->first +
1512                  "' set but does not appear in operand list!");
1513       const std::string &OpName = CGI.OperandList[i].Name;
1514       
1515       // Check that it exists in InstResults.
1516       TreePatternNode *RNode = InstResults[OpName];
1517       if (RNode == 0)
1518         I->error("Operand $" + OpName + " does not exist in operand list!");
1519         
1520       if (i == 0)
1521         Res0Node = RNode;
1522       Record *R = dynamic_cast<DefInit*>(RNode->getLeafValue())->getDef();
1523       if (R == 0)
1524         I->error("Operand $" + OpName + " should be a set destination: all "
1525                  "outputs must occur before inputs in operand list!");
1526       
1527       if (CGI.OperandList[i].Rec != R)
1528         I->error("Operand $" + OpName + " class mismatch!");
1529       
1530       // Remember the return type.
1531       Results.push_back(CGI.OperandList[i].Rec);
1532       
1533       // Okay, this one checks out.
1534       InstResults.erase(OpName);
1535     }
1536
1537     // Loop over the inputs next.  Make a copy of InstInputs so we can destroy
1538     // the copy while we're checking the inputs.
1539     std::map<std::string, TreePatternNode*> InstInputsCheck(InstInputs);
1540
1541     std::vector<TreePatternNode*> ResultNodeOperands;
1542     std::vector<Record*> Operands;
1543     for (unsigned i = NumResults, e = CGI.OperandList.size(); i != e; ++i) {
1544       CodeGenInstruction::OperandInfo &Op = CGI.OperandList[i];
1545       const std::string &OpName = Op.Name;
1546       if (OpName.empty())
1547         I->error("Operand #" + utostr(i) + " in operands list has no name!");
1548
1549       if (!InstInputsCheck.count(OpName)) {
1550         // If this is an predicate operand with an ExecuteAlways set filled in,
1551         // we can ignore this.  When we codegen it, we will do so as always
1552         // executed.
1553         if (Op.Rec->isSubClassOf("PredicateOperand")) {
1554           // Does it have a non-empty ExecuteAlways field?  If so, ignore this
1555           // operand.
1556           if (!getPredicateOperand(Op.Rec).AlwaysOps.empty())
1557             continue;
1558         }
1559         I->error("Operand $" + OpName +
1560                  " does not appear in the instruction pattern");
1561       }
1562       TreePatternNode *InVal = InstInputsCheck[OpName];
1563       InstInputsCheck.erase(OpName);   // It occurred, remove from map.
1564       
1565       if (InVal->isLeaf() &&
1566           dynamic_cast<DefInit*>(InVal->getLeafValue())) {
1567         Record *InRec = static_cast<DefInit*>(InVal->getLeafValue())->getDef();
1568         if (Op.Rec != InRec && !InRec->isSubClassOf("ComplexPattern"))
1569           I->error("Operand $" + OpName + "'s register class disagrees"
1570                    " between the operand and pattern");
1571       }
1572       Operands.push_back(Op.Rec);
1573       
1574       // Construct the result for the dest-pattern operand list.
1575       TreePatternNode *OpNode = InVal->clone();
1576       
1577       // No predicate is useful on the result.
1578       OpNode->setPredicateFn("");
1579       
1580       // Promote the xform function to be an explicit node if set.
1581       if (Record *Xform = OpNode->getTransformFn()) {
1582         OpNode->setTransformFn(0);
1583         std::vector<TreePatternNode*> Children;
1584         Children.push_back(OpNode);
1585         OpNode = new TreePatternNode(Xform, Children);
1586       }
1587       
1588       ResultNodeOperands.push_back(OpNode);
1589     }
1590     
1591     if (!InstInputsCheck.empty())
1592       I->error("Input operand $" + InstInputsCheck.begin()->first +
1593                " occurs in pattern but not in operands list!");
1594
1595     TreePatternNode *ResultPattern =
1596       new TreePatternNode(I->getRecord(), ResultNodeOperands);
1597     // Copy fully inferred output node type to instruction result pattern.
1598     if (NumResults > 0)
1599       ResultPattern->setTypes(Res0Node->getExtTypes());
1600
1601     // Create and insert the instruction.
1602     DAGInstruction TheInst(I, Results, Operands, InstImpResults, InstImpInputs);
1603     Instructions.insert(std::make_pair(I->getRecord(), TheInst));
1604
1605     // Use a temporary tree pattern to infer all types and make sure that the
1606     // constructed result is correct.  This depends on the instruction already
1607     // being inserted into the Instructions map.
1608     TreePattern Temp(I->getRecord(), ResultPattern, false, *this);
1609     Temp.InferAllTypes();
1610
1611     DAGInstruction &TheInsertedInst = Instructions.find(I->getRecord())->second;
1612     TheInsertedInst.setResultPattern(Temp.getOnlyTree());
1613     
1614     DEBUG(I->dump());
1615   }
1616    
1617   // If we can, convert the instructions to be patterns that are matched!
1618   for (std::map<Record*, DAGInstruction>::iterator II = Instructions.begin(),
1619        E = Instructions.end(); II != E; ++II) {
1620     DAGInstruction &TheInst = II->second;
1621     TreePattern *I = TheInst.getPattern();
1622     if (I == 0) continue;  // No pattern.
1623
1624     if (I->getNumTrees() != 1) {
1625       std::cerr << "CANNOT HANDLE: " << I->getRecord()->getName() << " yet!";
1626       continue;
1627     }
1628     TreePatternNode *Pattern = I->getTree(0);
1629     TreePatternNode *SrcPattern;
1630     if (Pattern->getOperator()->getName() == "set") {
1631       if (Pattern->getNumChildren() != 2)
1632         continue;  // Not a set of a single value (not handled so far)
1633
1634       SrcPattern = Pattern->getChild(1)->clone();    
1635     } else{
1636       // Not a set (store or something?)
1637       SrcPattern = Pattern;
1638     }
1639     
1640     std::string Reason;
1641     if (!SrcPattern->canPatternMatch(Reason, *this))
1642       I->error("Instruction can never match: " + Reason);
1643     
1644     Record *Instr = II->first;
1645     TreePatternNode *DstPattern = TheInst.getResultPattern();
1646     PatternsToMatch.
1647       push_back(PatternToMatch(Instr->getValueAsListInit("Predicates"),
1648                                SrcPattern, DstPattern,
1649                                Instr->getValueAsInt("AddedComplexity")));
1650   }
1651 }
1652
1653 void DAGISelEmitter::ParsePatterns() {
1654   std::vector<Record*> Patterns = Records.getAllDerivedDefinitions("Pattern");
1655
1656   for (unsigned i = 0, e = Patterns.size(); i != e; ++i) {
1657     DagInit *Tree = Patterns[i]->getValueAsDag("PatternToMatch");
1658     TreePattern *Pattern = new TreePattern(Patterns[i], Tree, true, *this);
1659
1660     // Inline pattern fragments into it.
1661     Pattern->InlinePatternFragments();
1662     
1663     ListInit *LI = Patterns[i]->getValueAsListInit("ResultInstrs");
1664     if (LI->getSize() == 0) continue;  // no pattern.
1665     
1666     // Parse the instruction.
1667     TreePattern *Result = new TreePattern(Patterns[i], LI, false, *this);
1668     
1669     // Inline pattern fragments into it.
1670     Result->InlinePatternFragments();
1671
1672     if (Result->getNumTrees() != 1)
1673       Result->error("Cannot handle instructions producing instructions "
1674                     "with temporaries yet!");
1675     
1676     bool IterateInference;
1677     bool InferredAllPatternTypes, InferredAllResultTypes;
1678     do {
1679       // Infer as many types as possible.  If we cannot infer all of them, we
1680       // can never do anything with this pattern: report it to the user.
1681       InferredAllPatternTypes = Pattern->InferAllTypes();
1682       
1683       // Infer as many types as possible.  If we cannot infer all of them, we
1684       // can never do anything with this pattern: report it to the user.
1685       InferredAllResultTypes = Result->InferAllTypes();
1686
1687       // Apply the type of the result to the source pattern.  This helps us
1688       // resolve cases where the input type is known to be a pointer type (which
1689       // is considered resolved), but the result knows it needs to be 32- or
1690       // 64-bits.  Infer the other way for good measure.
1691       IterateInference = Pattern->getOnlyTree()->
1692         UpdateNodeType(Result->getOnlyTree()->getExtTypes(), *Result);
1693       IterateInference |= Result->getOnlyTree()->
1694         UpdateNodeType(Pattern->getOnlyTree()->getExtTypes(), *Result);
1695     } while (IterateInference);
1696
1697     // Verify that we inferred enough types that we can do something with the
1698     // pattern and result.  If these fire the user has to add type casts.
1699     if (!InferredAllPatternTypes)
1700       Pattern->error("Could not infer all types in pattern!");
1701     if (!InferredAllResultTypes)
1702       Result->error("Could not infer all types in pattern result!");
1703     
1704     // Validate that the input pattern is correct.
1705     {
1706       std::map<std::string, TreePatternNode*> InstInputs;
1707       std::map<std::string, TreePatternNode*> InstResults;
1708       std::vector<Record*> InstImpInputs;
1709       std::vector<Record*> InstImpResults;
1710       FindPatternInputsAndOutputs(Pattern, Pattern->getOnlyTree(),
1711                                   InstInputs, InstResults,
1712                                   InstImpInputs, InstImpResults);
1713     }
1714
1715     // Promote the xform function to be an explicit node if set.
1716     std::vector<TreePatternNode*> ResultNodeOperands;
1717     TreePatternNode *DstPattern = Result->getOnlyTree();
1718     for (unsigned ii = 0, ee = DstPattern->getNumChildren(); ii != ee; ++ii) {
1719       TreePatternNode *OpNode = DstPattern->getChild(ii);
1720       if (Record *Xform = OpNode->getTransformFn()) {
1721         OpNode->setTransformFn(0);
1722         std::vector<TreePatternNode*> Children;
1723         Children.push_back(OpNode);
1724         OpNode = new TreePatternNode(Xform, Children);
1725       }
1726       ResultNodeOperands.push_back(OpNode);
1727     }
1728     DstPattern = Result->getOnlyTree();
1729     if (!DstPattern->isLeaf())
1730       DstPattern = new TreePatternNode(DstPattern->getOperator(),
1731                                        ResultNodeOperands);
1732     DstPattern->setTypes(Result->getOnlyTree()->getExtTypes());
1733     TreePattern Temp(Result->getRecord(), DstPattern, false, *this);
1734     Temp.InferAllTypes();
1735
1736     std::string Reason;
1737     if (!Pattern->getOnlyTree()->canPatternMatch(Reason, *this))
1738       Pattern->error("Pattern can never match: " + Reason);
1739     
1740     PatternsToMatch.
1741       push_back(PatternToMatch(Patterns[i]->getValueAsListInit("Predicates"),
1742                                Pattern->getOnlyTree(),
1743                                Temp.getOnlyTree(),
1744                                Patterns[i]->getValueAsInt("AddedComplexity")));
1745   }
1746 }
1747
1748 /// CombineChildVariants - Given a bunch of permutations of each child of the
1749 /// 'operator' node, put them together in all possible ways.
1750 static void CombineChildVariants(TreePatternNode *Orig, 
1751                const std::vector<std::vector<TreePatternNode*> > &ChildVariants,
1752                                  std::vector<TreePatternNode*> &OutVariants,
1753                                  DAGISelEmitter &ISE) {
1754   // Make sure that each operand has at least one variant to choose from.
1755   for (unsigned i = 0, e = ChildVariants.size(); i != e; ++i)
1756     if (ChildVariants[i].empty())
1757       return;
1758         
1759   // The end result is an all-pairs construction of the resultant pattern.
1760   std::vector<unsigned> Idxs;
1761   Idxs.resize(ChildVariants.size());
1762   bool NotDone = true;
1763   while (NotDone) {
1764     // Create the variant and add it to the output list.
1765     std::vector<TreePatternNode*> NewChildren;
1766     for (unsigned i = 0, e = ChildVariants.size(); i != e; ++i)
1767       NewChildren.push_back(ChildVariants[i][Idxs[i]]);
1768     TreePatternNode *R = new TreePatternNode(Orig->getOperator(), NewChildren);
1769     
1770     // Copy over properties.
1771     R->setName(Orig->getName());
1772     R->setPredicateFn(Orig->getPredicateFn());
1773     R->setTransformFn(Orig->getTransformFn());
1774     R->setTypes(Orig->getExtTypes());
1775     
1776     // If this pattern cannot every match, do not include it as a variant.
1777     std::string ErrString;
1778     if (!R->canPatternMatch(ErrString, ISE)) {
1779       delete R;
1780     } else {
1781       bool AlreadyExists = false;
1782       
1783       // Scan to see if this pattern has already been emitted.  We can get
1784       // duplication due to things like commuting:
1785       //   (and GPRC:$a, GPRC:$b) -> (and GPRC:$b, GPRC:$a)
1786       // which are the same pattern.  Ignore the dups.
1787       for (unsigned i = 0, e = OutVariants.size(); i != e; ++i)
1788         if (R->isIsomorphicTo(OutVariants[i])) {
1789           AlreadyExists = true;
1790           break;
1791         }
1792       
1793       if (AlreadyExists)
1794         delete R;
1795       else
1796         OutVariants.push_back(R);
1797     }
1798     
1799     // Increment indices to the next permutation.
1800     NotDone = false;
1801     // Look for something we can increment without causing a wrap-around.
1802     for (unsigned IdxsIdx = 0; IdxsIdx != Idxs.size(); ++IdxsIdx) {
1803       if (++Idxs[IdxsIdx] < ChildVariants[IdxsIdx].size()) {
1804         NotDone = true;   // Found something to increment.
1805         break;
1806       }
1807       Idxs[IdxsIdx] = 0;
1808     }
1809   }
1810 }
1811
1812 /// CombineChildVariants - A helper function for binary operators.
1813 ///
1814 static void CombineChildVariants(TreePatternNode *Orig, 
1815                                  const std::vector<TreePatternNode*> &LHS,
1816                                  const std::vector<TreePatternNode*> &RHS,
1817                                  std::vector<TreePatternNode*> &OutVariants,
1818                                  DAGISelEmitter &ISE) {
1819   std::vector<std::vector<TreePatternNode*> > ChildVariants;
1820   ChildVariants.push_back(LHS);
1821   ChildVariants.push_back(RHS);
1822   CombineChildVariants(Orig, ChildVariants, OutVariants, ISE);
1823 }  
1824
1825
1826 static void GatherChildrenOfAssociativeOpcode(TreePatternNode *N,
1827                                      std::vector<TreePatternNode *> &Children) {
1828   assert(N->getNumChildren()==2 &&"Associative but doesn't have 2 children!");
1829   Record *Operator = N->getOperator();
1830   
1831   // Only permit raw nodes.
1832   if (!N->getName().empty() || !N->getPredicateFn().empty() ||
1833       N->getTransformFn()) {
1834     Children.push_back(N);
1835     return;
1836   }
1837
1838   if (N->getChild(0)->isLeaf() || N->getChild(0)->getOperator() != Operator)
1839     Children.push_back(N->getChild(0));
1840   else
1841     GatherChildrenOfAssociativeOpcode(N->getChild(0), Children);
1842
1843   if (N->getChild(1)->isLeaf() || N->getChild(1)->getOperator() != Operator)
1844     Children.push_back(N->getChild(1));
1845   else
1846     GatherChildrenOfAssociativeOpcode(N->getChild(1), Children);
1847 }
1848
1849 /// GenerateVariantsOf - Given a pattern N, generate all permutations we can of
1850 /// the (potentially recursive) pattern by using algebraic laws.
1851 ///
1852 static void GenerateVariantsOf(TreePatternNode *N,
1853                                std::vector<TreePatternNode*> &OutVariants,
1854                                DAGISelEmitter &ISE) {
1855   // We cannot permute leaves.
1856   if (N->isLeaf()) {
1857     OutVariants.push_back(N);
1858     return;
1859   }
1860
1861   // Look up interesting info about the node.
1862   const SDNodeInfo &NodeInfo = ISE.getSDNodeInfo(N->getOperator());
1863
1864   // If this node is associative, reassociate.
1865   if (NodeInfo.hasProperty(SDNPAssociative)) {
1866     // Reassociate by pulling together all of the linked operators 
1867     std::vector<TreePatternNode*> MaximalChildren;
1868     GatherChildrenOfAssociativeOpcode(N, MaximalChildren);
1869
1870     // Only handle child sizes of 3.  Otherwise we'll end up trying too many
1871     // permutations.
1872     if (MaximalChildren.size() == 3) {
1873       // Find the variants of all of our maximal children.
1874       std::vector<TreePatternNode*> AVariants, BVariants, CVariants;
1875       GenerateVariantsOf(MaximalChildren[0], AVariants, ISE);
1876       GenerateVariantsOf(MaximalChildren[1], BVariants, ISE);
1877       GenerateVariantsOf(MaximalChildren[2], CVariants, ISE);
1878       
1879       // There are only two ways we can permute the tree:
1880       //   (A op B) op C    and    A op (B op C)
1881       // Within these forms, we can also permute A/B/C.
1882       
1883       // Generate legal pair permutations of A/B/C.
1884       std::vector<TreePatternNode*> ABVariants;
1885       std::vector<TreePatternNode*> BAVariants;
1886       std::vector<TreePatternNode*> ACVariants;
1887       std::vector<TreePatternNode*> CAVariants;
1888       std::vector<TreePatternNode*> BCVariants;
1889       std::vector<TreePatternNode*> CBVariants;
1890       CombineChildVariants(N, AVariants, BVariants, ABVariants, ISE);
1891       CombineChildVariants(N, BVariants, AVariants, BAVariants, ISE);
1892       CombineChildVariants(N, AVariants, CVariants, ACVariants, ISE);
1893       CombineChildVariants(N, CVariants, AVariants, CAVariants, ISE);
1894       CombineChildVariants(N, BVariants, CVariants, BCVariants, ISE);
1895       CombineChildVariants(N, CVariants, BVariants, CBVariants, ISE);
1896
1897       // Combine those into the result: (x op x) op x
1898       CombineChildVariants(N, ABVariants, CVariants, OutVariants, ISE);
1899       CombineChildVariants(N, BAVariants, CVariants, OutVariants, ISE);
1900       CombineChildVariants(N, ACVariants, BVariants, OutVariants, ISE);
1901       CombineChildVariants(N, CAVariants, BVariants, OutVariants, ISE);
1902       CombineChildVariants(N, BCVariants, AVariants, OutVariants, ISE);
1903       CombineChildVariants(N, CBVariants, AVariants, OutVariants, ISE);
1904
1905       // Combine those into the result: x op (x op x)
1906       CombineChildVariants(N, CVariants, ABVariants, OutVariants, ISE);
1907       CombineChildVariants(N, CVariants, BAVariants, OutVariants, ISE);
1908       CombineChildVariants(N, BVariants, ACVariants, OutVariants, ISE);
1909       CombineChildVariants(N, BVariants, CAVariants, OutVariants, ISE);
1910       CombineChildVariants(N, AVariants, BCVariants, OutVariants, ISE);
1911       CombineChildVariants(N, AVariants, CBVariants, OutVariants, ISE);
1912       return;
1913     }
1914   }
1915   
1916   // Compute permutations of all children.
1917   std::vector<std::vector<TreePatternNode*> > ChildVariants;
1918   ChildVariants.resize(N->getNumChildren());
1919   for (unsigned i = 0, e = N->getNumChildren(); i != e; ++i)
1920     GenerateVariantsOf(N->getChild(i), ChildVariants[i], ISE);
1921
1922   // Build all permutations based on how the children were formed.
1923   CombineChildVariants(N, ChildVariants, OutVariants, ISE);
1924
1925   // If this node is commutative, consider the commuted order.
1926   if (NodeInfo.hasProperty(SDNPCommutative)) {
1927     assert(N->getNumChildren()==2 &&"Commutative but doesn't have 2 children!");
1928     // Don't count children which are actually register references.
1929     unsigned NC = 0;
1930     for (unsigned i = 0, e = N->getNumChildren(); i != e; ++i) {
1931       TreePatternNode *Child = N->getChild(i);
1932       if (Child->isLeaf())
1933         if (DefInit *DI = dynamic_cast<DefInit*>(Child->getLeafValue())) {
1934           Record *RR = DI->getDef();
1935           if (RR->isSubClassOf("Register"))
1936             continue;
1937         }
1938       NC++;
1939     }
1940     // Consider the commuted order.
1941     if (NC == 2)
1942       CombineChildVariants(N, ChildVariants[1], ChildVariants[0],
1943                            OutVariants, ISE);
1944   }
1945 }
1946
1947
1948 // GenerateVariants - Generate variants.  For example, commutative patterns can
1949 // match multiple ways.  Add them to PatternsToMatch as well.
1950 void DAGISelEmitter::GenerateVariants() {
1951   
1952   DEBUG(std::cerr << "Generating instruction variants.\n");
1953   
1954   // Loop over all of the patterns we've collected, checking to see if we can
1955   // generate variants of the instruction, through the exploitation of
1956   // identities.  This permits the target to provide agressive matching without
1957   // the .td file having to contain tons of variants of instructions.
1958   //
1959   // Note that this loop adds new patterns to the PatternsToMatch list, but we
1960   // intentionally do not reconsider these.  Any variants of added patterns have
1961   // already been added.
1962   //
1963   for (unsigned i = 0, e = PatternsToMatch.size(); i != e; ++i) {
1964     std::vector<TreePatternNode*> Variants;
1965     GenerateVariantsOf(PatternsToMatch[i].getSrcPattern(), Variants, *this);
1966
1967     assert(!Variants.empty() && "Must create at least original variant!");
1968     Variants.erase(Variants.begin());  // Remove the original pattern.
1969
1970     if (Variants.empty())  // No variants for this pattern.
1971       continue;
1972
1973     DEBUG(std::cerr << "FOUND VARIANTS OF: ";
1974           PatternsToMatch[i].getSrcPattern()->dump();
1975           std::cerr << "\n");
1976
1977     for (unsigned v = 0, e = Variants.size(); v != e; ++v) {
1978       TreePatternNode *Variant = Variants[v];
1979
1980       DEBUG(std::cerr << "  VAR#" << v <<  ": ";
1981             Variant->dump();
1982             std::cerr << "\n");
1983       
1984       // Scan to see if an instruction or explicit pattern already matches this.
1985       bool AlreadyExists = false;
1986       for (unsigned p = 0, e = PatternsToMatch.size(); p != e; ++p) {
1987         // Check to see if this variant already exists.
1988         if (Variant->isIsomorphicTo(PatternsToMatch[p].getSrcPattern())) {
1989           DEBUG(std::cerr << "  *** ALREADY EXISTS, ignoring variant.\n");
1990           AlreadyExists = true;
1991           break;
1992         }
1993       }
1994       // If we already have it, ignore the variant.
1995       if (AlreadyExists) continue;
1996
1997       // Otherwise, add it to the list of patterns we have.
1998       PatternsToMatch.
1999         push_back(PatternToMatch(PatternsToMatch[i].getPredicates(),
2000                                  Variant, PatternsToMatch[i].getDstPattern(),
2001                                  PatternsToMatch[i].getAddedComplexity()));
2002     }
2003
2004     DEBUG(std::cerr << "\n");
2005   }
2006 }
2007
2008 // NodeIsComplexPattern - return true if N is a leaf node and a subclass of
2009 // ComplexPattern.
2010 static bool NodeIsComplexPattern(TreePatternNode *N)
2011 {
2012   return (N->isLeaf() &&
2013           dynamic_cast<DefInit*>(N->getLeafValue()) &&
2014           static_cast<DefInit*>(N->getLeafValue())->getDef()->
2015           isSubClassOf("ComplexPattern"));
2016 }
2017
2018 // NodeGetComplexPattern - return the pointer to the ComplexPattern if N
2019 // is a leaf node and a subclass of ComplexPattern, else it returns NULL.
2020 static const ComplexPattern *NodeGetComplexPattern(TreePatternNode *N,
2021                                                    DAGISelEmitter &ISE)
2022 {
2023   if (N->isLeaf() &&
2024       dynamic_cast<DefInit*>(N->getLeafValue()) &&
2025       static_cast<DefInit*>(N->getLeafValue())->getDef()->
2026       isSubClassOf("ComplexPattern")) {
2027     return &ISE.getComplexPattern(static_cast<DefInit*>(N->getLeafValue())
2028                                   ->getDef());
2029   }
2030   return NULL;
2031 }
2032
2033 /// getPatternSize - Return the 'size' of this pattern.  We want to match large
2034 /// patterns before small ones.  This is used to determine the size of a
2035 /// pattern.
2036 static unsigned getPatternSize(TreePatternNode *P, DAGISelEmitter &ISE) {
2037   assert((isExtIntegerInVTs(P->getExtTypes()) || 
2038           isExtFloatingPointInVTs(P->getExtTypes()) ||
2039           P->getExtTypeNum(0) == MVT::isVoid ||
2040           P->getExtTypeNum(0) == MVT::Flag ||
2041           P->getExtTypeNum(0) == MVT::iPTR) && 
2042          "Not a valid pattern node to size!");
2043   unsigned Size = 3;  // The node itself.
2044   // If the root node is a ConstantSDNode, increases its size.
2045   // e.g. (set R32:$dst, 0).
2046   if (P->isLeaf() && dynamic_cast<IntInit*>(P->getLeafValue()))
2047     Size += 2;
2048
2049   // FIXME: This is a hack to statically increase the priority of patterns
2050   // which maps a sub-dag to a complex pattern. e.g. favors LEA over ADD.
2051   // Later we can allow complexity / cost for each pattern to be (optionally)
2052   // specified. To get best possible pattern match we'll need to dynamically
2053   // calculate the complexity of all patterns a dag can potentially map to.
2054   const ComplexPattern *AM = NodeGetComplexPattern(P, ISE);
2055   if (AM)
2056     Size += AM->getNumOperands() * 3;
2057
2058   // If this node has some predicate function that must match, it adds to the
2059   // complexity of this node.
2060   if (!P->getPredicateFn().empty())
2061     ++Size;
2062   
2063   // Count children in the count if they are also nodes.
2064   for (unsigned i = 0, e = P->getNumChildren(); i != e; ++i) {
2065     TreePatternNode *Child = P->getChild(i);
2066     if (!Child->isLeaf() && Child->getExtTypeNum(0) != MVT::Other)
2067       Size += getPatternSize(Child, ISE);
2068     else if (Child->isLeaf()) {
2069       if (dynamic_cast<IntInit*>(Child->getLeafValue())) 
2070         Size += 5;  // Matches a ConstantSDNode (+3) and a specific value (+2).
2071       else if (NodeIsComplexPattern(Child))
2072         Size += getPatternSize(Child, ISE);
2073       else if (!Child->getPredicateFn().empty())
2074         ++Size;
2075     }
2076   }
2077   
2078   return Size;
2079 }
2080
2081 /// getResultPatternCost - Compute the number of instructions for this pattern.
2082 /// This is a temporary hack.  We should really include the instruction
2083 /// latencies in this calculation.
2084 static unsigned getResultPatternCost(TreePatternNode *P, DAGISelEmitter &ISE) {
2085   if (P->isLeaf()) return 0;
2086   
2087   unsigned Cost = 0;
2088   Record *Op = P->getOperator();
2089   if (Op->isSubClassOf("Instruction")) {
2090     Cost++;
2091     CodeGenInstruction &II = ISE.getTargetInfo().getInstruction(Op->getName());
2092     if (II.usesCustomDAGSchedInserter)
2093       Cost += 10;
2094   }
2095   for (unsigned i = 0, e = P->getNumChildren(); i != e; ++i)
2096     Cost += getResultPatternCost(P->getChild(i), ISE);
2097   return Cost;
2098 }
2099
2100 /// getResultPatternCodeSize - Compute the code size of instructions for this
2101 /// pattern.
2102 static unsigned getResultPatternSize(TreePatternNode *P, DAGISelEmitter &ISE) {
2103   if (P->isLeaf()) return 0;
2104
2105   unsigned Cost = 0;
2106   Record *Op = P->getOperator();
2107   if (Op->isSubClassOf("Instruction")) {
2108     Cost += Op->getValueAsInt("CodeSize");
2109   }
2110   for (unsigned i = 0, e = P->getNumChildren(); i != e; ++i)
2111     Cost += getResultPatternSize(P->getChild(i), ISE);
2112   return Cost;
2113 }
2114
2115 // PatternSortingPredicate - return true if we prefer to match LHS before RHS.
2116 // In particular, we want to match maximal patterns first and lowest cost within
2117 // a particular complexity first.
2118 struct PatternSortingPredicate {
2119   PatternSortingPredicate(DAGISelEmitter &ise) : ISE(ise) {};
2120   DAGISelEmitter &ISE;
2121
2122   bool operator()(PatternToMatch *LHS,
2123                   PatternToMatch *RHS) {
2124     unsigned LHSSize = getPatternSize(LHS->getSrcPattern(), ISE);
2125     unsigned RHSSize = getPatternSize(RHS->getSrcPattern(), ISE);
2126     LHSSize += LHS->getAddedComplexity();
2127     RHSSize += RHS->getAddedComplexity();
2128     if (LHSSize > RHSSize) return true;   // LHS -> bigger -> less cost
2129     if (LHSSize < RHSSize) return false;
2130     
2131     // If the patterns have equal complexity, compare generated instruction cost
2132     unsigned LHSCost = getResultPatternCost(LHS->getDstPattern(), ISE);
2133     unsigned RHSCost = getResultPatternCost(RHS->getDstPattern(), ISE);
2134     if (LHSCost < RHSCost) return true;
2135     if (LHSCost > RHSCost) return false;
2136
2137     return getResultPatternSize(LHS->getDstPattern(), ISE) <
2138       getResultPatternSize(RHS->getDstPattern(), ISE);
2139   }
2140 };
2141
2142 /// getRegisterValueType - Look up and return the first ValueType of specified 
2143 /// RegisterClass record
2144 static MVT::ValueType getRegisterValueType(Record *R, const CodeGenTarget &T) {
2145   if (const CodeGenRegisterClass *RC = T.getRegisterClassForRegister(R))
2146     return RC->getValueTypeNum(0);
2147   return MVT::Other;
2148 }
2149
2150
2151 /// RemoveAllTypes - A quick recursive walk over a pattern which removes all
2152 /// type information from it.
2153 static void RemoveAllTypes(TreePatternNode *N) {
2154   N->removeTypes();
2155   if (!N->isLeaf())
2156     for (unsigned i = 0, e = N->getNumChildren(); i != e; ++i)
2157       RemoveAllTypes(N->getChild(i));
2158 }
2159
2160 Record *DAGISelEmitter::getSDNodeNamed(const std::string &Name) const {
2161   Record *N = Records.getDef(Name);
2162   if (!N || !N->isSubClassOf("SDNode")) {
2163     std::cerr << "Error getting SDNode '" << Name << "'!\n";
2164     exit(1);
2165   }
2166   return N;
2167 }
2168
2169 /// NodeHasProperty - return true if TreePatternNode has the specified
2170 /// property.
2171 static bool NodeHasProperty(TreePatternNode *N, SDNP Property,
2172                             DAGISelEmitter &ISE)
2173 {
2174   if (N->isLeaf()) {
2175     const ComplexPattern *CP = NodeGetComplexPattern(N, ISE);
2176     if (CP)
2177       return CP->hasProperty(Property);
2178     return false;
2179   }
2180   Record *Operator = N->getOperator();
2181   if (!Operator->isSubClassOf("SDNode")) return false;
2182
2183   const SDNodeInfo &NodeInfo = ISE.getSDNodeInfo(Operator);
2184   return NodeInfo.hasProperty(Property);
2185 }
2186
2187 static bool PatternHasProperty(TreePatternNode *N, SDNP Property,
2188                                DAGISelEmitter &ISE)
2189 {
2190   if (NodeHasProperty(N, Property, ISE))
2191     return true;
2192
2193   for (unsigned i = 0, e = N->getNumChildren(); i != e; ++i) {
2194     TreePatternNode *Child = N->getChild(i);
2195     if (PatternHasProperty(Child, Property, ISE))
2196       return true;
2197   }
2198
2199   return false;
2200 }
2201
2202 class PatternCodeEmitter {
2203 private:
2204   DAGISelEmitter &ISE;
2205
2206   // Predicates.
2207   ListInit *Predicates;
2208   // Pattern cost.
2209   unsigned Cost;
2210   // Instruction selector pattern.
2211   TreePatternNode *Pattern;
2212   // Matched instruction.
2213   TreePatternNode *Instruction;
2214   
2215   // Node to name mapping
2216   std::map<std::string, std::string> VariableMap;
2217   // Node to operator mapping
2218   std::map<std::string, Record*> OperatorMap;
2219   // Names of all the folded nodes which produce chains.
2220   std::vector<std::pair<std::string, unsigned> > FoldedChains;
2221   // Original input chain(s).
2222   std::vector<std::pair<std::string, std::string> > OrigChains;
2223   std::set<std::string> Duplicates;
2224
2225   /// GeneratedCode - This is the buffer that we emit code to.  The first int
2226   /// indicates whether this is an exit predicate (something that should be
2227   /// tested, and if true, the match fails) [when 1], or normal code to emit
2228   /// [when 0], or initialization code to emit [when 2].
2229   std::vector<std::pair<unsigned, std::string> > &GeneratedCode;
2230   /// GeneratedDecl - This is the set of all SDOperand declarations needed for
2231   /// the set of patterns for each top-level opcode.
2232   std::set<std::string> &GeneratedDecl;
2233   /// TargetOpcodes - The target specific opcodes used by the resulting
2234   /// instructions.
2235   std::vector<std::string> &TargetOpcodes;
2236   std::vector<std::string> &TargetVTs;
2237
2238   std::string ChainName;
2239   unsigned TmpNo;
2240   unsigned OpcNo;
2241   unsigned VTNo;
2242   
2243   void emitCheck(const std::string &S) {
2244     if (!S.empty())
2245       GeneratedCode.push_back(std::make_pair(1, S));
2246   }
2247   void emitCode(const std::string &S) {
2248     if (!S.empty())
2249       GeneratedCode.push_back(std::make_pair(0, S));
2250   }
2251   void emitInit(const std::string &S) {
2252     if (!S.empty())
2253       GeneratedCode.push_back(std::make_pair(2, S));
2254   }
2255   void emitDecl(const std::string &S) {
2256     assert(!S.empty() && "Invalid declaration");
2257     GeneratedDecl.insert(S);
2258   }
2259   void emitOpcode(const std::string &Opc) {
2260     TargetOpcodes.push_back(Opc);
2261     OpcNo++;
2262   }
2263   void emitVT(const std::string &VT) {
2264     TargetVTs.push_back(VT);
2265     VTNo++;
2266   }
2267 public:
2268   PatternCodeEmitter(DAGISelEmitter &ise, ListInit *preds,
2269                      TreePatternNode *pattern, TreePatternNode *instr,
2270                      std::vector<std::pair<unsigned, std::string> > &gc,
2271                      std::set<std::string> &gd,
2272                      std::vector<std::string> &to,
2273                      std::vector<std::string> &tv)
2274   : ISE(ise), Predicates(preds), Pattern(pattern), Instruction(instr),
2275     GeneratedCode(gc), GeneratedDecl(gd),
2276     TargetOpcodes(to), TargetVTs(tv),
2277     TmpNo(0), OpcNo(0), VTNo(0) {}
2278
2279   /// EmitMatchCode - Emit a matcher for N, going to the label for PatternNo
2280   /// if the match fails. At this point, we already know that the opcode for N
2281   /// matches, and the SDNode for the result has the RootName specified name.
2282   void EmitMatchCode(TreePatternNode *N, TreePatternNode *P,
2283                      const std::string &RootName, const std::string &ChainSuffix,
2284                      bool &FoundChain) {
2285     bool isRoot = (P == NULL);
2286     // Emit instruction predicates. Each predicate is just a string for now.
2287     if (isRoot) {
2288       std::string PredicateCheck;
2289       for (unsigned i = 0, e = Predicates->getSize(); i != e; ++i) {
2290         if (DefInit *Pred = dynamic_cast<DefInit*>(Predicates->getElement(i))) {
2291           Record *Def = Pred->getDef();
2292           if (!Def->isSubClassOf("Predicate")) {
2293 #ifndef NDEBUG
2294             Def->dump();
2295 #endif
2296             assert(0 && "Unknown predicate type!");
2297           }
2298           if (!PredicateCheck.empty())
2299             PredicateCheck += " && ";
2300           PredicateCheck += "(" + Def->getValueAsString("CondString") + ")";
2301         }
2302       }
2303       
2304       emitCheck(PredicateCheck);
2305     }
2306
2307     if (N->isLeaf()) {
2308       if (IntInit *II = dynamic_cast<IntInit*>(N->getLeafValue())) {
2309         emitCheck("cast<ConstantSDNode>(" + RootName +
2310                   ")->getSignExtended() == " + itostr(II->getValue()));
2311         return;
2312       } else if (!NodeIsComplexPattern(N)) {
2313         assert(0 && "Cannot match this as a leaf value!");
2314         abort();
2315       }
2316     }
2317   
2318     // If this node has a name associated with it, capture it in VariableMap. If
2319     // we already saw this in the pattern, emit code to verify dagness.
2320     if (!N->getName().empty()) {
2321       std::string &VarMapEntry = VariableMap[N->getName()];
2322       if (VarMapEntry.empty()) {
2323         VarMapEntry = RootName;
2324       } else {
2325         // If we get here, this is a second reference to a specific name.  Since
2326         // we already have checked that the first reference is valid, we don't
2327         // have to recursively match it, just check that it's the same as the
2328         // previously named thing.
2329         emitCheck(VarMapEntry + " == " + RootName);
2330         return;
2331       }
2332
2333       if (!N->isLeaf())
2334         OperatorMap[N->getName()] = N->getOperator();
2335     }
2336
2337
2338     // Emit code to load the child nodes and match their contents recursively.
2339     unsigned OpNo = 0;
2340     bool NodeHasChain = NodeHasProperty   (N, SDNPHasChain, ISE);
2341     bool HasChain     = PatternHasProperty(N, SDNPHasChain, ISE);
2342     bool EmittedUseCheck = false;
2343     if (HasChain) {
2344       if (NodeHasChain)
2345         OpNo = 1;
2346       if (!isRoot) {
2347         // Multiple uses of actual result?
2348         emitCheck(RootName + ".hasOneUse()");
2349         EmittedUseCheck = true;
2350         if (NodeHasChain) {
2351           // If the immediate use can somehow reach this node through another
2352           // path, then can't fold it either or it will create a cycle.
2353           // e.g. In the following diagram, XX can reach ld through YY. If
2354           // ld is folded into XX, then YY is both a predecessor and a successor
2355           // of XX.
2356           //
2357           //         [ld]
2358           //         ^  ^
2359           //         |  |
2360           //        /   \---
2361           //      /        [YY]
2362           //      |         ^
2363           //     [XX]-------|
2364           bool NeedCheck = false;
2365           if (P != Pattern)
2366             NeedCheck = true;
2367           else {
2368             const SDNodeInfo &PInfo = ISE.getSDNodeInfo(P->getOperator());
2369             NeedCheck =
2370               P->getOperator() == ISE.get_intrinsic_void_sdnode() ||
2371               P->getOperator() == ISE.get_intrinsic_w_chain_sdnode() ||
2372               P->getOperator() == ISE.get_intrinsic_wo_chain_sdnode() ||
2373               PInfo.getNumOperands() > 1 ||
2374               PInfo.hasProperty(SDNPHasChain) ||
2375               PInfo.hasProperty(SDNPInFlag) ||
2376               PInfo.hasProperty(SDNPOptInFlag);
2377           }
2378
2379           if (NeedCheck) {
2380             std::string ParentName(RootName.begin(), RootName.end()-1);
2381             emitCheck("CanBeFoldedBy(" + RootName + ".Val, " + ParentName +
2382                       ".Val, N.Val)");
2383           }
2384         }
2385       }
2386
2387       if (NodeHasChain) {
2388         if (FoundChain) {
2389           emitCheck("(" + ChainName + ".Val == " + RootName + ".Val || "
2390                     "IsChainCompatible(" + ChainName + ".Val, " +
2391                     RootName + ".Val))");
2392           OrigChains.push_back(std::make_pair(ChainName, RootName));
2393         } else
2394           FoundChain = true;
2395         ChainName = "Chain" + ChainSuffix;
2396         emitInit("SDOperand " + ChainName + " = " + RootName +
2397                  ".getOperand(0);");
2398       }
2399     }
2400
2401     // Don't fold any node which reads or writes a flag and has multiple uses.
2402     // FIXME: We really need to separate the concepts of flag and "glue". Those
2403     // real flag results, e.g. X86CMP output, can have multiple uses.
2404     // FIXME: If the optional incoming flag does not exist. Then it is ok to
2405     // fold it.
2406     if (!isRoot &&
2407         (PatternHasProperty(N, SDNPInFlag, ISE) ||
2408          PatternHasProperty(N, SDNPOptInFlag, ISE) ||
2409          PatternHasProperty(N, SDNPOutFlag, ISE))) {
2410       if (!EmittedUseCheck) {
2411         // Multiple uses of actual result?
2412         emitCheck(RootName + ".hasOneUse()");
2413       }
2414     }
2415
2416     // If there is a node predicate for this, emit the call.
2417     if (!N->getPredicateFn().empty())
2418       emitCheck(N->getPredicateFn() + "(" + RootName + ".Val)");
2419
2420     
2421     // If this is an 'and R, 1234' where the operation is AND/OR and the RHS is
2422     // a constant without a predicate fn that has more that one bit set, handle
2423     // this as a special case.  This is usually for targets that have special
2424     // handling of certain large constants (e.g. alpha with it's 8/16/32-bit
2425     // handling stuff).  Using these instructions is often far more efficient
2426     // than materializing the constant.  Unfortunately, both the instcombiner
2427     // and the dag combiner can often infer that bits are dead, and thus drop
2428     // them from the mask in the dag.  For example, it might turn 'AND X, 255'
2429     // into 'AND X, 254' if it knows the low bit is set.  Emit code that checks
2430     // to handle this.
2431     if (!N->isLeaf() && 
2432         (N->getOperator()->getName() == "and" || 
2433          N->getOperator()->getName() == "or") &&
2434         N->getChild(1)->isLeaf() &&
2435         N->getChild(1)->getPredicateFn().empty()) {
2436       if (IntInit *II = dynamic_cast<IntInit*>(N->getChild(1)->getLeafValue())) {
2437         if (!isPowerOf2_32(II->getValue())) {  // Don't bother with single bits.
2438           emitInit("SDOperand " + RootName + "0" + " = " +
2439                    RootName + ".getOperand(" + utostr(0) + ");");
2440           emitInit("SDOperand " + RootName + "1" + " = " +
2441                    RootName + ".getOperand(" + utostr(1) + ");");
2442
2443           emitCheck("isa<ConstantSDNode>(" + RootName + "1)");
2444           const char *MaskPredicate = N->getOperator()->getName() == "or"
2445             ? "CheckOrMask(" : "CheckAndMask(";
2446           emitCheck(MaskPredicate + RootName + "0, cast<ConstantSDNode>(" +
2447                     RootName + "1), " + itostr(II->getValue()) + ")");
2448           
2449           EmitChildMatchCode(N->getChild(0), N, RootName + utostr(0),
2450                              ChainSuffix + utostr(0), FoundChain);
2451           return;
2452         }
2453       }
2454     }
2455     
2456     for (unsigned i = 0, e = N->getNumChildren(); i != e; ++i, ++OpNo) {
2457       emitInit("SDOperand " + RootName + utostr(OpNo) + " = " +
2458                RootName + ".getOperand(" +utostr(OpNo) + ");");
2459
2460       EmitChildMatchCode(N->getChild(i), N, RootName + utostr(OpNo),
2461                          ChainSuffix + utostr(OpNo), FoundChain);
2462     }
2463
2464     // Handle cases when root is a complex pattern.
2465     const ComplexPattern *CP;
2466     if (isRoot && N->isLeaf() && (CP = NodeGetComplexPattern(N, ISE))) {
2467       std::string Fn = CP->getSelectFunc();
2468       unsigned NumOps = CP->getNumOperands();
2469       for (unsigned i = 0; i < NumOps; ++i) {
2470         emitDecl("CPTmp" + utostr(i));
2471         emitCode("SDOperand CPTmp" + utostr(i) + ";");
2472       }
2473       if (CP->hasProperty(SDNPHasChain)) {
2474         emitDecl("CPInChain");
2475         emitDecl("Chain" + ChainSuffix);
2476         emitCode("SDOperand CPInChain;");
2477         emitCode("SDOperand Chain" + ChainSuffix + ";");
2478       }
2479
2480       std::string Code = Fn + "(" + RootName + ", " + RootName;
2481       for (unsigned i = 0; i < NumOps; i++)
2482         Code += ", CPTmp" + utostr(i);
2483       if (CP->hasProperty(SDNPHasChain)) {
2484         ChainName = "Chain" + ChainSuffix;
2485         Code += ", CPInChain, Chain" + ChainSuffix;
2486       }
2487       emitCheck(Code + ")");
2488     }
2489   }
2490
2491   void EmitChildMatchCode(TreePatternNode *Child, TreePatternNode *Parent,
2492                           const std::string &RootName,
2493                           const std::string &ChainSuffix, bool &FoundChain) {
2494     if (!Child->isLeaf()) {
2495       // If it's not a leaf, recursively match.
2496       const SDNodeInfo &CInfo = ISE.getSDNodeInfo(Child->getOperator());
2497       emitCheck(RootName + ".getOpcode() == " +
2498                 CInfo.getEnumName());
2499       EmitMatchCode(Child, Parent, RootName, ChainSuffix, FoundChain);
2500       if (NodeHasProperty(Child, SDNPHasChain, ISE))
2501         FoldedChains.push_back(std::make_pair(RootName, CInfo.getNumResults()));
2502     } else {
2503       // If this child has a name associated with it, capture it in VarMap. If
2504       // we already saw this in the pattern, emit code to verify dagness.
2505       if (!Child->getName().empty()) {
2506         std::string &VarMapEntry = VariableMap[Child->getName()];
2507         if (VarMapEntry.empty()) {
2508           VarMapEntry = RootName;
2509         } else {
2510           // If we get here, this is a second reference to a specific name.
2511           // Since we already have checked that the first reference is valid,
2512           // we don't have to recursively match it, just check that it's the
2513           // same as the previously named thing.
2514           emitCheck(VarMapEntry + " == " + RootName);
2515           Duplicates.insert(RootName);
2516           return;
2517         }
2518       }
2519       
2520       // Handle leaves of various types.
2521       if (DefInit *DI = dynamic_cast<DefInit*>(Child->getLeafValue())) {
2522         Record *LeafRec = DI->getDef();
2523         if (LeafRec->isSubClassOf("RegisterClass") || 
2524             LeafRec->getName() == "ptr_rc") {
2525           // Handle register references.  Nothing to do here.
2526         } else if (LeafRec->isSubClassOf("Register")) {
2527           // Handle register references.
2528         } else if (LeafRec->isSubClassOf("ComplexPattern")) {
2529           // Handle complex pattern.
2530           const ComplexPattern *CP = NodeGetComplexPattern(Child, ISE);
2531           std::string Fn = CP->getSelectFunc();
2532           unsigned NumOps = CP->getNumOperands();
2533           for (unsigned i = 0; i < NumOps; ++i) {
2534             emitDecl("CPTmp" + utostr(i));
2535             emitCode("SDOperand CPTmp" + utostr(i) + ";");
2536           }
2537           if (CP->hasProperty(SDNPHasChain)) {
2538             const SDNodeInfo &PInfo = ISE.getSDNodeInfo(Parent->getOperator());
2539             FoldedChains.push_back(std::make_pair("CPInChain",
2540                                                   PInfo.getNumResults()));
2541             ChainName = "Chain" + ChainSuffix;
2542             emitDecl("CPInChain");
2543             emitDecl(ChainName);
2544             emitCode("SDOperand CPInChain;");
2545             emitCode("SDOperand " + ChainName + ";");
2546           }
2547           
2548           std::string Code = Fn + "(N, ";
2549           if (CP->hasProperty(SDNPHasChain)) {
2550             std::string ParentName(RootName.begin(), RootName.end()-1);
2551             Code += ParentName + ", ";
2552           }
2553           Code += RootName;
2554           for (unsigned i = 0; i < NumOps; i++)
2555             Code += ", CPTmp" + utostr(i);
2556           if (CP->hasProperty(SDNPHasChain))
2557             Code += ", CPInChain, Chain" + ChainSuffix;
2558           emitCheck(Code + ")");
2559         } else if (LeafRec->getName() == "srcvalue") {
2560           // Place holder for SRCVALUE nodes. Nothing to do here.
2561         } else if (LeafRec->isSubClassOf("ValueType")) {
2562           // Make sure this is the specified value type.
2563           emitCheck("cast<VTSDNode>(" + RootName +
2564                     ")->getVT() == MVT::" + LeafRec->getName());
2565         } else if (LeafRec->isSubClassOf("CondCode")) {
2566           // Make sure this is the specified cond code.
2567           emitCheck("cast<CondCodeSDNode>(" + RootName +
2568                     ")->get() == ISD::" + LeafRec->getName());
2569         } else {
2570 #ifndef NDEBUG
2571           Child->dump();
2572           std::cerr << " ";
2573 #endif
2574           assert(0 && "Unknown leaf type!");
2575         }
2576         
2577         // If there is a node predicate for this, emit the call.
2578         if (!Child->getPredicateFn().empty())
2579           emitCheck(Child->getPredicateFn() + "(" + RootName +
2580                     ".Val)");
2581       } else if (IntInit *II =
2582                  dynamic_cast<IntInit*>(Child->getLeafValue())) {
2583         emitCheck("isa<ConstantSDNode>(" + RootName + ")");
2584         unsigned CTmp = TmpNo++;
2585         emitCode("int64_t CN"+utostr(CTmp)+" = cast<ConstantSDNode>("+
2586                  RootName + ")->getSignExtended();");
2587         
2588         emitCheck("CN" + utostr(CTmp) + " == " +itostr(II->getValue()));
2589       } else {
2590 #ifndef NDEBUG
2591         Child->dump();
2592 #endif
2593         assert(0 && "Unknown leaf type!");
2594       }
2595     }
2596   }
2597
2598   /// EmitResultCode - Emit the action for a pattern.  Now that it has matched
2599   /// we actually have to build a DAG!
2600   std::vector<std::string>
2601   EmitResultCode(TreePatternNode *N, bool RetSelected,
2602                  bool InFlagDecled, bool ResNodeDecled,
2603                  bool LikeLeaf = false, bool isRoot = false) {
2604     // List of arguments of getTargetNode() or SelectNodeTo().
2605     std::vector<std::string> NodeOps;
2606     // This is something selected from the pattern we matched.
2607     if (!N->getName().empty()) {
2608       std::string &Val = VariableMap[N->getName()];
2609       assert(!Val.empty() &&
2610              "Variable referenced but not defined and not caught earlier!");
2611       if (Val[0] == 'T' && Val[1] == 'm' && Val[2] == 'p') {
2612         // Already selected this operand, just return the tmpval.
2613         NodeOps.push_back(Val);
2614         return NodeOps;
2615       }
2616
2617       const ComplexPattern *CP;
2618       unsigned ResNo = TmpNo++;
2619       if (!N->isLeaf() && N->getOperator()->getName() == "imm") {
2620         assert(N->getExtTypes().size() == 1 && "Multiple types not handled!");
2621         std::string CastType;
2622         switch (N->getTypeNum(0)) {
2623         default: assert(0 && "Unknown type for constant node!");
2624         case MVT::i1:  CastType = "bool"; break;
2625         case MVT::i8:  CastType = "unsigned char"; break;
2626         case MVT::i16: CastType = "unsigned short"; break;
2627         case MVT::i32: CastType = "unsigned"; break;
2628         case MVT::i64: CastType = "uint64_t"; break;
2629         }
2630         emitCode("SDOperand Tmp" + utostr(ResNo) + 
2631                  " = CurDAG->getTargetConstant(((" + CastType +
2632                  ") cast<ConstantSDNode>(" + Val + ")->getValue()), " +
2633                  getEnumName(N->getTypeNum(0)) + ");");
2634         NodeOps.push_back("Tmp" + utostr(ResNo));
2635         // Add Tmp<ResNo> to VariableMap, so that we don't multiply select this
2636         // value if used multiple times by this pattern result.
2637         Val = "Tmp"+utostr(ResNo);
2638       } else if (!N->isLeaf() && N->getOperator()->getName() == "texternalsym"){
2639         Record *Op = OperatorMap[N->getName()];
2640         // Transform ExternalSymbol to TargetExternalSymbol
2641         if (Op && Op->getName() == "externalsym") {
2642           emitCode("SDOperand Tmp" + utostr(ResNo) + " = CurDAG->getTarget"
2643                    "ExternalSymbol(cast<ExternalSymbolSDNode>(" +
2644                    Val + ")->getSymbol(), " +
2645                    getEnumName(N->getTypeNum(0)) + ");");
2646           NodeOps.push_back("Tmp" + utostr(ResNo));
2647           // Add Tmp<ResNo> to VariableMap, so that we don't multiply select
2648           // this value if used multiple times by this pattern result.
2649           Val = "Tmp"+utostr(ResNo);
2650         } else {
2651           NodeOps.push_back(Val);
2652         }
2653       } else if (!N->isLeaf() && N->getOperator()->getName() == "tglobaladdr") {
2654         Record *Op = OperatorMap[N->getName()];
2655         // Transform GlobalAddress to TargetGlobalAddress
2656         if (Op && Op->getName() == "globaladdr") {
2657           emitCode("SDOperand Tmp" + utostr(ResNo) + " = CurDAG->getTarget"
2658                    "GlobalAddress(cast<GlobalAddressSDNode>(" + Val +
2659                    ")->getGlobal(), " + getEnumName(N->getTypeNum(0)) +
2660                    ");");
2661           NodeOps.push_back("Tmp" + utostr(ResNo));
2662           // Add Tmp<ResNo> to VariableMap, so that we don't multiply select
2663           // this value if used multiple times by this pattern result.
2664           Val = "Tmp"+utostr(ResNo);
2665         } else {
2666           NodeOps.push_back(Val);
2667         }
2668       } else if (!N->isLeaf() && N->getOperator()->getName() == "texternalsym"){
2669         NodeOps.push_back(Val);
2670         // Add Tmp<ResNo> to VariableMap, so that we don't multiply select this
2671         // value if used multiple times by this pattern result.
2672         Val = "Tmp"+utostr(ResNo);
2673       } else if (!N->isLeaf() && N->getOperator()->getName() == "tconstpool") {
2674         NodeOps.push_back(Val);
2675         // Add Tmp<ResNo> to VariableMap, so that we don't multiply select this
2676         // value if used multiple times by this pattern result.
2677         Val = "Tmp"+utostr(ResNo);
2678       } else if (N->isLeaf() && (CP = NodeGetComplexPattern(N, ISE))) {
2679         for (unsigned i = 0; i < CP->getNumOperands(); ++i) {
2680           emitCode("AddToISelQueue(CPTmp" + utostr(i) + ");");
2681           NodeOps.push_back("CPTmp" + utostr(i));
2682         }
2683       } else {
2684         // This node, probably wrapped in a SDNodeXForm, behaves like a leaf
2685         // node even if it isn't one. Don't select it.
2686         if (!LikeLeaf) {
2687           emitCode("AddToISelQueue(" + Val + ");");
2688           if (isRoot && N->isLeaf()) {
2689             emitCode("ReplaceUses(N, " + Val + ");");
2690             emitCode("return NULL;");
2691           }
2692         }
2693         NodeOps.push_back(Val);
2694       }
2695       return NodeOps;
2696     }
2697     if (N->isLeaf()) {
2698       // If this is an explicit register reference, handle it.
2699       if (DefInit *DI = dynamic_cast<DefInit*>(N->getLeafValue())) {
2700         unsigned ResNo = TmpNo++;
2701         if (DI->getDef()->isSubClassOf("Register")) {
2702           emitCode("SDOperand Tmp" + utostr(ResNo) + " = CurDAG->getRegister(" +
2703                    ISE.getQualifiedName(DI->getDef()) + ", " +
2704                    getEnumName(N->getTypeNum(0)) + ");");
2705           NodeOps.push_back("Tmp" + utostr(ResNo));
2706           return NodeOps;
2707         }
2708       } else if (IntInit *II = dynamic_cast<IntInit*>(N->getLeafValue())) {
2709         unsigned ResNo = TmpNo++;
2710         assert(N->getExtTypes().size() == 1 && "Multiple types not handled!");
2711         emitCode("SDOperand Tmp" + utostr(ResNo) + 
2712                  " = CurDAG->getTargetConstant(" + itostr(II->getValue()) +
2713                  ", " + getEnumName(N->getTypeNum(0)) + ");");
2714         NodeOps.push_back("Tmp" + utostr(ResNo));
2715         return NodeOps;
2716       }
2717     
2718 #ifndef NDEBUG
2719       N->dump();
2720 #endif
2721       assert(0 && "Unknown leaf type!");
2722       return NodeOps;
2723     }
2724
2725     Record *Op = N->getOperator();
2726     if (Op->isSubClassOf("Instruction")) {
2727       const CodeGenTarget &CGT = ISE.getTargetInfo();
2728       CodeGenInstruction &II = CGT.getInstruction(Op->getName());
2729       const DAGInstruction &Inst = ISE.getInstruction(Op);
2730       TreePattern *InstPat = Inst.getPattern();
2731       TreePatternNode *InstPatNode =
2732         isRoot ? (InstPat ? InstPat->getOnlyTree() : Pattern)
2733                : (InstPat ? InstPat->getOnlyTree() : NULL);
2734       if (InstPatNode && InstPatNode->getOperator()->getName() == "set") {
2735         InstPatNode = InstPatNode->getChild(1);
2736       }
2737       bool HasVarOps     = isRoot && II.hasVariableNumberOfOperands;
2738       bool HasImpInputs  = isRoot && Inst.getNumImpOperands() > 0;
2739       bool HasImpResults = isRoot && Inst.getNumImpResults() > 0;
2740       bool NodeHasOptInFlag = isRoot &&
2741         PatternHasProperty(Pattern, SDNPOptInFlag, ISE);
2742       bool NodeHasInFlag  = isRoot &&
2743         PatternHasProperty(Pattern, SDNPInFlag, ISE);
2744       bool NodeHasOutFlag = HasImpResults || (isRoot &&
2745         PatternHasProperty(Pattern, SDNPOutFlag, ISE));
2746       bool NodeHasChain = InstPatNode &&
2747         PatternHasProperty(InstPatNode, SDNPHasChain, ISE);
2748       bool InputHasChain = isRoot &&
2749         NodeHasProperty(Pattern, SDNPHasChain, ISE);
2750       unsigned NumResults = Inst.getNumResults();    
2751
2752       if (NodeHasOptInFlag) {
2753         emitCode("bool HasInFlag = "
2754            "(N.getOperand(N.getNumOperands()-1).getValueType() == MVT::Flag);");
2755       }
2756       if (HasVarOps)
2757         emitCode("SmallVector<SDOperand, 8> Ops" + utostr(OpcNo) + ";");
2758
2759       // How many results is this pattern expected to produce?
2760       unsigned PatResults = 0;
2761       for (unsigned i = 0, e = Pattern->getExtTypes().size(); i != e; i++) {
2762         MVT::ValueType VT = Pattern->getTypeNum(i);
2763         if (VT != MVT::isVoid && VT != MVT::Flag)
2764           PatResults++;
2765       }
2766
2767       if (OrigChains.size() > 0) {
2768         // The original input chain is being ignored. If it is not just
2769         // pointing to the op that's being folded, we should create a
2770         // TokenFactor with it and the chain of the folded op as the new chain.
2771         // We could potentially be doing multiple levels of folding, in that
2772         // case, the TokenFactor can have more operands.
2773         emitCode("SmallVector<SDOperand, 8> InChains;");
2774         for (unsigned i = 0, e = OrigChains.size(); i < e; ++i) {
2775           emitCode("if (" + OrigChains[i].first + ".Val != " +
2776                    OrigChains[i].second + ".Val) {");
2777           emitCode("  AddToISelQueue(" + OrigChains[i].first + ");");
2778           emitCode("  InChains.push_back(" + OrigChains[i].first + ");");
2779           emitCode("}");
2780         }
2781         emitCode("AddToISelQueue(" + ChainName + ");");
2782         emitCode("InChains.push_back(" + ChainName + ");");
2783         emitCode(ChainName + " = CurDAG->getNode(ISD::TokenFactor, MVT::Other, "
2784                  "&InChains[0], InChains.size());");
2785       }
2786
2787       // Loop over all of the operands of the instruction pattern, emitting code
2788       // to fill them all in.  The node 'N' usually has number children equal to
2789       // the number of input operands of the instruction.  However, in cases
2790       // where there are predicate operands for an instruction, we need to fill
2791       // in the 'execute always' values.  Match up the node operands to the
2792       // instruction operands to do this.
2793       std::vector<std::string> AllOps;
2794       for (unsigned ChildNo = 0, InstOpNo = NumResults;
2795            InstOpNo != II.OperandList.size(); ++InstOpNo) {
2796         std::vector<std::string> Ops;
2797         
2798         // If this is a normal operand, emit it.
2799         if (!II.OperandList[InstOpNo].Rec->isSubClassOf("PredicateOperand")) {
2800           Ops = EmitResultCode(N->getChild(ChildNo), RetSelected, 
2801                                InFlagDecled, ResNodeDecled);
2802           AllOps.insert(AllOps.end(), Ops.begin(), Ops.end());
2803           ++ChildNo;
2804         } else {
2805           // Otherwise, this is a predicate operand, emit the 'execute always'
2806           // operands.
2807           const DAGPredicateOperand &Pred =
2808             ISE.getPredicateOperand(II.OperandList[InstOpNo].Rec);
2809           for (unsigned i = 0, e = Pred.AlwaysOps.size(); i != e; ++i) {
2810             Ops = EmitResultCode(Pred.AlwaysOps[i], RetSelected, 
2811                                  InFlagDecled, ResNodeDecled);
2812             AllOps.insert(AllOps.end(), Ops.begin(), Ops.end());
2813           }
2814         }
2815       }
2816
2817       // Emit all the chain and CopyToReg stuff.
2818       bool ChainEmitted = NodeHasChain;
2819       if (NodeHasChain)
2820         emitCode("AddToISelQueue(" + ChainName + ");");
2821       if (NodeHasInFlag || HasImpInputs)
2822         EmitInFlagSelectCode(Pattern, "N", ChainEmitted,
2823                              InFlagDecled, ResNodeDecled, true);
2824       if (NodeHasOptInFlag || NodeHasInFlag || HasImpInputs) {
2825         if (!InFlagDecled) {
2826           emitCode("SDOperand InFlag(0, 0);");
2827           InFlagDecled = true;
2828         }
2829         if (NodeHasOptInFlag) {
2830           emitCode("if (HasInFlag) {");
2831           emitCode("  InFlag = N.getOperand(N.getNumOperands()-1);");
2832           emitCode("  AddToISelQueue(InFlag);");
2833           emitCode("}");
2834         }
2835       }
2836
2837       unsigned ResNo = TmpNo++;
2838       if (!isRoot || InputHasChain || NodeHasChain || NodeHasOutFlag ||
2839           NodeHasOptInFlag) {
2840         std::string Code;
2841         std::string Code2;
2842         std::string NodeName;
2843         if (!isRoot) {
2844           NodeName = "Tmp" + utostr(ResNo);
2845           Code2 = "SDOperand " + NodeName + " = SDOperand(";
2846         } else {
2847           NodeName = "ResNode";
2848           if (!ResNodeDecled)
2849             Code2 = "SDNode *" + NodeName + " = ";
2850           else
2851             Code2 = NodeName + " = ";
2852         }
2853
2854         Code = "CurDAG->getTargetNode(Opc" + utostr(OpcNo);
2855         unsigned OpsNo = OpcNo;
2856         emitOpcode(II.Namespace + "::" + II.TheDef->getName());
2857
2858         // Output order: results, chain, flags
2859         // Result types.
2860         if (NumResults > 0 && N->getTypeNum(0) != MVT::isVoid) {
2861           Code += ", VT" + utostr(VTNo);
2862           emitVT(getEnumName(N->getTypeNum(0)));
2863         }
2864         if (NodeHasChain)
2865           Code += ", MVT::Other";
2866         if (NodeHasOutFlag)
2867           Code += ", MVT::Flag";
2868
2869         // Figure out how many fixed inputs the node has.  This is important to
2870         // know which inputs are the variable ones if present.
2871         unsigned NumInputs = AllOps.size();
2872         NumInputs += NodeHasChain;
2873         
2874         // Inputs.
2875         if (HasVarOps) {
2876           for (unsigned i = 0, e = AllOps.size(); i != e; ++i)
2877             emitCode("Ops" + utostr(OpsNo) + ".push_back(" + AllOps[i] + ");");
2878           AllOps.clear();
2879         }
2880
2881         if (HasVarOps) {
2882           // Figure out whether any operands at the end of the op list are not
2883           // part of the variable section.
2884           std::string EndAdjust;
2885           if (NodeHasInFlag || HasImpInputs)
2886             EndAdjust = "-1";  // Always has one flag.
2887           else if (NodeHasOptInFlag)
2888             EndAdjust = "-(HasInFlag?1:0)"; // May have a flag.
2889
2890           emitCode("for (unsigned i = " + utostr(NumInputs) +
2891                    ", e = N.getNumOperands()" + EndAdjust + "; i != e; ++i) {");
2892
2893           emitCode("  AddToISelQueue(N.getOperand(i));");
2894           emitCode("  Ops" + utostr(OpsNo) + ".push_back(N.getOperand(i));");
2895           emitCode("}");
2896         }
2897
2898         if (NodeHasChain) {
2899           if (HasVarOps)
2900             emitCode("Ops" + utostr(OpsNo) + ".push_back(" + ChainName + ");");
2901           else
2902             AllOps.push_back(ChainName);
2903         }
2904
2905         if (HasVarOps) {
2906           if (NodeHasInFlag || HasImpInputs)
2907             emitCode("Ops" + utostr(OpsNo) + ".push_back(InFlag);");
2908           else if (NodeHasOptInFlag) {
2909             emitCode("if (HasInFlag)");
2910             emitCode("  Ops" + utostr(OpsNo) + ".push_back(InFlag);");
2911           }
2912           Code += ", &Ops" + utostr(OpsNo) + "[0], Ops" + utostr(OpsNo) +
2913             ".size()";
2914         } else if (NodeHasInFlag || NodeHasOptInFlag || HasImpInputs)
2915             AllOps.push_back("InFlag");
2916
2917         unsigned NumOps = AllOps.size();
2918         if (NumOps) {
2919           if (!NodeHasOptInFlag && NumOps < 4) {
2920             for (unsigned i = 0; i != NumOps; ++i)
2921               Code += ", " + AllOps[i];
2922           } else {
2923             std::string OpsCode = "SDOperand Ops" + utostr(OpsNo) + "[] = { ";
2924             for (unsigned i = 0; i != NumOps; ++i) {
2925               OpsCode += AllOps[i];
2926               if (i != NumOps-1)
2927                 OpsCode += ", ";
2928             }
2929             emitCode(OpsCode + " };");
2930             Code += ", Ops" + utostr(OpsNo) + ", ";
2931             if (NodeHasOptInFlag) {
2932               Code += "HasInFlag ? ";
2933               Code += utostr(NumOps) + " : " + utostr(NumOps-1);
2934             } else
2935               Code += utostr(NumOps);
2936           }
2937         }
2938             
2939         if (!isRoot)
2940           Code += "), 0";
2941         emitCode(Code2 + Code + ");");
2942
2943         if (NodeHasChain)
2944           // Remember which op produces the chain.
2945           if (!isRoot)
2946             emitCode(ChainName + " = SDOperand(" + NodeName +
2947                      ".Val, " + utostr(PatResults) + ");");
2948           else
2949             emitCode(ChainName + " = SDOperand(" + NodeName +
2950                      ", " + utostr(PatResults) + ");");
2951
2952         if (!isRoot) {
2953           NodeOps.push_back("Tmp" + utostr(ResNo));
2954           return NodeOps;
2955         }
2956
2957         bool NeedReplace = false;
2958         if (NodeHasOutFlag) {
2959           if (!InFlagDecled) {
2960             emitCode("SDOperand InFlag = SDOperand(ResNode, " + 
2961                      utostr(NumResults + (unsigned)NodeHasChain) + ");");
2962             InFlagDecled = true;
2963           } else
2964             emitCode("InFlag = SDOperand(ResNode, " + 
2965                      utostr(NumResults + (unsigned)NodeHasChain) + ");");
2966         }
2967
2968         if (HasImpResults && EmitCopyFromRegs(N, ResNodeDecled, ChainEmitted)) {
2969           emitCode("ReplaceUses(SDOperand(N.Val, 0), SDOperand(ResNode, 0));");
2970           NumResults = 1;
2971         }
2972
2973         if (FoldedChains.size() > 0) {
2974           std::string Code;
2975           for (unsigned j = 0, e = FoldedChains.size(); j < e; j++)
2976             emitCode("ReplaceUses(SDOperand(" +
2977                      FoldedChains[j].first + ".Val, " + 
2978                      utostr(FoldedChains[j].second) + "), SDOperand(ResNode, " +
2979                      utostr(NumResults) + "));");
2980           NeedReplace = true;
2981         }
2982
2983         if (NodeHasOutFlag) {
2984           emitCode("ReplaceUses(SDOperand(N.Val, " +
2985                    utostr(PatResults + (unsigned)InputHasChain) +"), InFlag);");
2986           NeedReplace = true;
2987         }
2988
2989         if (NeedReplace) {
2990           for (unsigned i = 0; i < NumResults; i++)
2991             emitCode("ReplaceUses(SDOperand(N.Val, " +
2992                      utostr(i) + "), SDOperand(ResNode, " + utostr(i) + "));");
2993           if (InputHasChain)
2994             emitCode("ReplaceUses(SDOperand(N.Val, " + 
2995                      utostr(PatResults) + "), SDOperand(" + ChainName + ".Val, "
2996                      + ChainName + ".ResNo" + "));");
2997         } else
2998           RetSelected = true;
2999
3000         // User does not expect the instruction would produce a chain!
3001         if ((!InputHasChain && NodeHasChain) && NodeHasOutFlag) {
3002           ;
3003         } else if (InputHasChain && !NodeHasChain) {
3004           // One of the inner node produces a chain.
3005           if (NodeHasOutFlag)
3006             emitCode("ReplaceUses(SDOperand(N.Val, " + utostr(PatResults+1) +
3007                      "), SDOperand(ResNode, N.ResNo-1));");
3008           for (unsigned i = 0; i < PatResults; ++i)
3009             emitCode("ReplaceUses(SDOperand(N.Val, " + utostr(i) +
3010                      "), SDOperand(ResNode, " + utostr(i) + "));");
3011           emitCode("ReplaceUses(SDOperand(N.Val, " + utostr(PatResults) +
3012                    "), " + ChainName + ");");
3013           RetSelected = false;
3014         }
3015
3016         if (RetSelected)
3017           emitCode("return ResNode;");
3018         else
3019           emitCode("return NULL;");
3020       } else {
3021         std::string Code = "return CurDAG->SelectNodeTo(N.Val, Opc" +
3022           utostr(OpcNo);
3023         if (N->getTypeNum(0) != MVT::isVoid)
3024           Code += ", VT" + utostr(VTNo);
3025         if (NodeHasOutFlag)
3026           Code += ", MVT::Flag";
3027
3028         if (NodeHasInFlag || NodeHasOptInFlag || HasImpInputs)
3029           AllOps.push_back("InFlag");
3030
3031         unsigned NumOps = AllOps.size();
3032         if (NumOps) {
3033           if (!NodeHasOptInFlag && NumOps < 4) {
3034             for (unsigned i = 0; i != NumOps; ++i)
3035               Code += ", " + AllOps[i];
3036           } else {
3037             std::string OpsCode = "SDOperand Ops" + utostr(OpcNo) + "[] = { ";
3038             for (unsigned i = 0; i != NumOps; ++i) {
3039               OpsCode += AllOps[i];
3040               if (i != NumOps-1)
3041                 OpsCode += ", ";
3042             }
3043             emitCode(OpsCode + " };");
3044             Code += ", Ops" + utostr(OpcNo) + ", ";
3045             Code += utostr(NumOps);
3046           }
3047         }
3048         emitCode(Code + ");");
3049         emitOpcode(II.Namespace + "::" + II.TheDef->getName());
3050         if (N->getTypeNum(0) != MVT::isVoid)
3051           emitVT(getEnumName(N->getTypeNum(0)));
3052       }
3053
3054       return NodeOps;
3055     } else if (Op->isSubClassOf("SDNodeXForm")) {
3056       assert(N->getNumChildren() == 1 && "node xform should have one child!");
3057       // PatLeaf node - the operand may or may not be a leaf node. But it should
3058       // behave like one.
3059       std::vector<std::string> Ops =
3060         EmitResultCode(N->getChild(0), RetSelected, InFlagDecled,
3061                        ResNodeDecled, true);
3062       unsigned ResNo = TmpNo++;
3063       emitCode("SDOperand Tmp" + utostr(ResNo) + " = Transform_" + Op->getName()
3064                + "(" + Ops.back() + ".Val);");
3065       NodeOps.push_back("Tmp" + utostr(ResNo));
3066       if (isRoot)
3067         emitCode("return Tmp" + utostr(ResNo) + ".Val;");
3068       return NodeOps;
3069     } else {
3070       N->dump();
3071       std::cerr << "\n";
3072       throw std::string("Unknown node in result pattern!");
3073     }
3074   }
3075
3076   /// InsertOneTypeCheck - Insert a type-check for an unresolved type in 'Pat'
3077   /// and add it to the tree. 'Pat' and 'Other' are isomorphic trees except that 
3078   /// 'Pat' may be missing types.  If we find an unresolved type to add a check
3079   /// for, this returns true otherwise false if Pat has all types.
3080   bool InsertOneTypeCheck(TreePatternNode *Pat, TreePatternNode *Other,
3081                           const std::string &Prefix, bool isRoot = false) {
3082     // Did we find one?
3083     if (Pat->getExtTypes() != Other->getExtTypes()) {
3084       // Move a type over from 'other' to 'pat'.
3085       Pat->setTypes(Other->getExtTypes());
3086       // The top level node type is checked outside of the select function.
3087       if (!isRoot)
3088         emitCheck(Prefix + ".Val->getValueType(0) == " +
3089                   getName(Pat->getTypeNum(0)));
3090       return true;
3091     }
3092   
3093     unsigned OpNo =
3094       (unsigned) NodeHasProperty(Pat, SDNPHasChain, ISE);
3095     for (unsigned i = 0, e = Pat->getNumChildren(); i != e; ++i, ++OpNo)
3096       if (InsertOneTypeCheck(Pat->getChild(i), Other->getChild(i),
3097                              Prefix + utostr(OpNo)))
3098         return true;
3099     return false;
3100   }
3101
3102 private:
3103   /// EmitInFlagSelectCode - Emit the flag operands for the DAG that is
3104   /// being built.
3105   void EmitInFlagSelectCode(TreePatternNode *N, const std::string &RootName,
3106                             bool &ChainEmitted, bool &InFlagDecled,
3107                             bool &ResNodeDecled, bool isRoot = false) {
3108     const CodeGenTarget &T = ISE.getTargetInfo();
3109     unsigned OpNo =
3110       (unsigned) NodeHasProperty(N, SDNPHasChain, ISE);
3111     bool HasInFlag = NodeHasProperty(N, SDNPInFlag, ISE);
3112     for (unsigned i = 0, e = N->getNumChildren(); i != e; ++i, ++OpNo) {
3113       TreePatternNode *Child = N->getChild(i);
3114       if (!Child->isLeaf()) {
3115         EmitInFlagSelectCode(Child, RootName + utostr(OpNo), ChainEmitted,
3116                              InFlagDecled, ResNodeDecled);
3117       } else {
3118         if (DefInit *DI = dynamic_cast<DefInit*>(Child->getLeafValue())) {
3119           if (!Child->getName().empty()) {
3120             std::string Name = RootName + utostr(OpNo);
3121             if (Duplicates.find(Name) != Duplicates.end())
3122               // A duplicate! Do not emit a copy for this node.
3123               continue;
3124           }
3125
3126           Record *RR = DI->getDef();
3127           if (RR->isSubClassOf("Register")) {
3128             MVT::ValueType RVT = getRegisterValueType(RR, T);
3129             if (RVT == MVT::Flag) {
3130               if (!InFlagDecled) {
3131                 emitCode("SDOperand InFlag = " + RootName + utostr(OpNo) + ";");
3132                 InFlagDecled = true;
3133               } else
3134                 emitCode("InFlag = " + RootName + utostr(OpNo) + ";");
3135               emitCode("AddToISelQueue(InFlag);");
3136             } else {
3137               if (!ChainEmitted) {
3138                 emitCode("SDOperand Chain = CurDAG->getEntryNode();");
3139                 ChainName = "Chain";
3140                 ChainEmitted = true;
3141               }
3142               emitCode("AddToISelQueue(" + RootName + utostr(OpNo) + ");");
3143               if (!InFlagDecled) {
3144                 emitCode("SDOperand InFlag(0, 0);");
3145                 InFlagDecled = true;
3146               }
3147               std::string Decl = (!ResNodeDecled) ? "SDNode *" : "";
3148               emitCode(Decl + "ResNode = CurDAG->getCopyToReg(" + ChainName +
3149                        ", " + ISE.getQualifiedName(RR) +
3150                        ", " +  RootName + utostr(OpNo) + ", InFlag).Val;");
3151               ResNodeDecled = true;
3152               emitCode(ChainName + " = SDOperand(ResNode, 0);");
3153               emitCode("InFlag = SDOperand(ResNode, 1);");
3154             }
3155           }
3156         }
3157       }
3158     }
3159
3160     if (HasInFlag) {
3161       if (!InFlagDecled) {
3162         emitCode("SDOperand InFlag = " + RootName +
3163                ".getOperand(" + utostr(OpNo) + ");");
3164         InFlagDecled = true;
3165       } else
3166         emitCode("InFlag = " + RootName +
3167                ".getOperand(" + utostr(OpNo) + ");");
3168       emitCode("AddToISelQueue(InFlag);");
3169     }
3170   }
3171
3172   /// EmitCopyFromRegs - Emit code to copy result to physical registers
3173   /// as specified by the instruction. It returns true if any copy is
3174   /// emitted.
3175   bool EmitCopyFromRegs(TreePatternNode *N, bool &ResNodeDecled,
3176                         bool &ChainEmitted) {
3177     bool RetVal = false;
3178     Record *Op = N->getOperator();
3179     if (Op->isSubClassOf("Instruction")) {
3180       const DAGInstruction &Inst = ISE.getInstruction(Op);
3181       const CodeGenTarget &CGT = ISE.getTargetInfo();
3182       unsigned NumImpResults  = Inst.getNumImpResults();
3183       for (unsigned i = 0; i < NumImpResults; i++) {
3184         Record *RR = Inst.getImpResult(i);
3185         if (RR->isSubClassOf("Register")) {
3186           MVT::ValueType RVT = getRegisterValueType(RR, CGT);
3187           if (RVT != MVT::Flag) {
3188             if (!ChainEmitted) {
3189               emitCode("SDOperand Chain = CurDAG->getEntryNode();");
3190               ChainEmitted = true;
3191               ChainName = "Chain";
3192             }
3193             std::string Decl = (!ResNodeDecled) ? "SDNode *" : "";
3194             emitCode(Decl + "ResNode = CurDAG->getCopyFromReg(" + ChainName +
3195                      ", " + ISE.getQualifiedName(RR) + ", " + getEnumName(RVT) +
3196                      ", InFlag).Val;");
3197             ResNodeDecled = true;
3198             emitCode(ChainName + " = SDOperand(ResNode, 1);");
3199             emitCode("InFlag = SDOperand(ResNode, 2);");
3200             RetVal = true;
3201           }
3202         }
3203       }
3204     }
3205     return RetVal;
3206   }
3207 };
3208
3209 /// EmitCodeForPattern - Given a pattern to match, emit code to the specified
3210 /// stream to match the pattern, and generate the code for the match if it
3211 /// succeeds.  Returns true if the pattern is not guaranteed to match.
3212 void DAGISelEmitter::GenerateCodeForPattern(PatternToMatch &Pattern,
3213                   std::vector<std::pair<unsigned, std::string> > &GeneratedCode,
3214                                            std::set<std::string> &GeneratedDecl,
3215                                         std::vector<std::string> &TargetOpcodes,
3216                                           std::vector<std::string> &TargetVTs) {
3217   PatternCodeEmitter Emitter(*this, Pattern.getPredicates(),
3218                              Pattern.getSrcPattern(), Pattern.getDstPattern(),
3219                              GeneratedCode, GeneratedDecl,
3220                              TargetOpcodes, TargetVTs);
3221
3222   // Emit the matcher, capturing named arguments in VariableMap.
3223   bool FoundChain = false;
3224   Emitter.EmitMatchCode(Pattern.getSrcPattern(), NULL, "N", "", FoundChain);
3225
3226   // TP - Get *SOME* tree pattern, we don't care which.
3227   TreePattern &TP = *PatternFragments.begin()->second;
3228   
3229   // At this point, we know that we structurally match the pattern, but the
3230   // types of the nodes may not match.  Figure out the fewest number of type 
3231   // comparisons we need to emit.  For example, if there is only one integer
3232   // type supported by a target, there should be no type comparisons at all for
3233   // integer patterns!
3234   //
3235   // To figure out the fewest number of type checks needed, clone the pattern,
3236   // remove the types, then perform type inference on the pattern as a whole.
3237   // If there are unresolved types, emit an explicit check for those types,
3238   // apply the type to the tree, then rerun type inference.  Iterate until all
3239   // types are resolved.
3240   //
3241   TreePatternNode *Pat = Pattern.getSrcPattern()->clone();
3242   RemoveAllTypes(Pat);
3243   
3244   do {
3245     // Resolve/propagate as many types as possible.
3246     try {
3247       bool MadeChange = true;
3248       while (MadeChange)
3249         MadeChange = Pat->ApplyTypeConstraints(TP,
3250                                                true/*Ignore reg constraints*/);
3251     } catch (...) {
3252       assert(0 && "Error: could not find consistent types for something we"
3253              " already decided was ok!");
3254       abort();
3255     }
3256
3257     // Insert a check for an unresolved type and add it to the tree.  If we find
3258     // an unresolved type to add a check for, this returns true and we iterate,
3259     // otherwise we are done.
3260   } while (Emitter.InsertOneTypeCheck(Pat, Pattern.getSrcPattern(), "N", true));
3261
3262   Emitter.EmitResultCode(Pattern.getDstPattern(),
3263                          false, false, false, false, true);
3264   delete Pat;
3265 }
3266
3267 /// EraseCodeLine - Erase one code line from all of the patterns.  If removing
3268 /// a line causes any of them to be empty, remove them and return true when
3269 /// done.
3270 static bool EraseCodeLine(std::vector<std::pair<PatternToMatch*, 
3271                           std::vector<std::pair<unsigned, std::string> > > >
3272                           &Patterns) {
3273   bool ErasedPatterns = false;
3274   for (unsigned i = 0, e = Patterns.size(); i != e; ++i) {
3275     Patterns[i].second.pop_back();
3276     if (Patterns[i].second.empty()) {
3277       Patterns.erase(Patterns.begin()+i);
3278       --i; --e;
3279       ErasedPatterns = true;
3280     }
3281   }
3282   return ErasedPatterns;
3283 }
3284
3285 /// EmitPatterns - Emit code for at least one pattern, but try to group common
3286 /// code together between the patterns.
3287 void DAGISelEmitter::EmitPatterns(std::vector<std::pair<PatternToMatch*, 
3288                               std::vector<std::pair<unsigned, std::string> > > >
3289                                   &Patterns, unsigned Indent,
3290                                   std::ostream &OS) {
3291   typedef std::pair<unsigned, std::string> CodeLine;
3292   typedef std::vector<CodeLine> CodeList;
3293   typedef std::vector<std::pair<PatternToMatch*, CodeList> > PatternList;
3294   
3295   if (Patterns.empty()) return;
3296   
3297   // Figure out how many patterns share the next code line.  Explicitly copy
3298   // FirstCodeLine so that we don't invalidate a reference when changing
3299   // Patterns.
3300   const CodeLine FirstCodeLine = Patterns.back().second.back();
3301   unsigned LastMatch = Patterns.size()-1;
3302   while (LastMatch != 0 && Patterns[LastMatch-1].second.back() == FirstCodeLine)
3303     --LastMatch;
3304   
3305   // If not all patterns share this line, split the list into two pieces.  The
3306   // first chunk will use this line, the second chunk won't.
3307   if (LastMatch != 0) {
3308     PatternList Shared(Patterns.begin()+LastMatch, Patterns.end());
3309     PatternList Other(Patterns.begin(), Patterns.begin()+LastMatch);
3310     
3311     // FIXME: Emit braces?
3312     if (Shared.size() == 1) {
3313       PatternToMatch &Pattern = *Shared.back().first;
3314       OS << "\n" << std::string(Indent, ' ') << "// Pattern: ";
3315       Pattern.getSrcPattern()->print(OS);
3316       OS << "\n" << std::string(Indent, ' ') << "// Emits: ";
3317       Pattern.getDstPattern()->print(OS);
3318       OS << "\n";
3319       unsigned AddedComplexity = Pattern.getAddedComplexity();
3320       OS << std::string(Indent, ' ') << "// Pattern complexity = "
3321          << getPatternSize(Pattern.getSrcPattern(), *this) + AddedComplexity
3322          << "  cost = "
3323          << getResultPatternCost(Pattern.getDstPattern(), *this)
3324          << "  size = "
3325          << getResultPatternSize(Pattern.getDstPattern(), *this) << "\n";
3326     }
3327     if (FirstCodeLine.first != 1) {
3328       OS << std::string(Indent, ' ') << "{\n";
3329       Indent += 2;
3330     }
3331     EmitPatterns(Shared, Indent, OS);
3332     if (FirstCodeLine.first != 1) {
3333       Indent -= 2;
3334       OS << std::string(Indent, ' ') << "}\n";
3335     }
3336     
3337     if (Other.size() == 1) {
3338       PatternToMatch &Pattern = *Other.back().first;
3339       OS << "\n" << std::string(Indent, ' ') << "// Pattern: ";
3340       Pattern.getSrcPattern()->print(OS);
3341       OS << "\n" << std::string(Indent, ' ') << "// Emits: ";
3342       Pattern.getDstPattern()->print(OS);
3343       OS << "\n";
3344       unsigned AddedComplexity = Pattern.getAddedComplexity();
3345       OS << std::string(Indent, ' ') << "// Pattern complexity = "
3346          << getPatternSize(Pattern.getSrcPattern(), *this) + AddedComplexity
3347          << "  cost = "
3348          << getResultPatternCost(Pattern.getDstPattern(), *this)
3349          << "  size = "
3350          << getResultPatternSize(Pattern.getDstPattern(), *this) << "\n";
3351     }
3352     EmitPatterns(Other, Indent, OS);
3353     return;
3354   }
3355   
3356   // Remove this code from all of the patterns that share it.
3357   bool ErasedPatterns = EraseCodeLine(Patterns);
3358   
3359   bool isPredicate = FirstCodeLine.first == 1;
3360   
3361   // Otherwise, every pattern in the list has this line.  Emit it.
3362   if (!isPredicate) {
3363     // Normal code.
3364     OS << std::string(Indent, ' ') << FirstCodeLine.second << "\n";
3365   } else {
3366     OS << std::string(Indent, ' ') << "if (" << FirstCodeLine.second;
3367     
3368     // If the next code line is another predicate, and if all of the pattern
3369     // in this group share the same next line, emit it inline now.  Do this
3370     // until we run out of common predicates.
3371     while (!ErasedPatterns && Patterns.back().second.back().first == 1) {
3372       // Check that all of fhe patterns in Patterns end with the same predicate.
3373       bool AllEndWithSamePredicate = true;
3374       for (unsigned i = 0, e = Patterns.size(); i != e; ++i)
3375         if (Patterns[i].second.back() != Patterns.back().second.back()) {
3376           AllEndWithSamePredicate = false;
3377           break;
3378         }
3379       // If all of the predicates aren't the same, we can't share them.
3380       if (!AllEndWithSamePredicate) break;
3381       
3382       // Otherwise we can.  Emit it shared now.
3383       OS << " &&\n" << std::string(Indent+4, ' ')
3384          << Patterns.back().second.back().second;
3385       ErasedPatterns = EraseCodeLine(Patterns);
3386     }
3387     
3388     OS << ") {\n";
3389     Indent += 2;
3390   }
3391   
3392   EmitPatterns(Patterns, Indent, OS);
3393   
3394   if (isPredicate)
3395     OS << std::string(Indent-2, ' ') << "}\n";
3396 }
3397
3398 static std::string getOpcodeName(Record *Op, DAGISelEmitter &ISE) {
3399   const SDNodeInfo &OpcodeInfo = ISE.getSDNodeInfo(Op);
3400   return OpcodeInfo.getEnumName();
3401 }
3402
3403 static std::string getLegalCName(std::string OpName) {
3404   std::string::size_type pos = OpName.find("::");
3405   if (pos != std::string::npos)
3406     OpName.replace(pos, 2, "_");
3407   return OpName;
3408 }
3409
3410 void DAGISelEmitter::EmitInstructionSelector(std::ostream &OS) {
3411   std::string InstNS = Target.inst_begin()->second.Namespace;
3412   if (!InstNS.empty()) InstNS += "::";
3413   
3414   // Group the patterns by their top-level opcodes.
3415   std::map<std::string, std::vector<PatternToMatch*> > PatternsByOpcode;
3416   // All unique target node emission functions.
3417   std::map<std::string, unsigned> EmitFunctions;
3418   for (unsigned i = 0, e = PatternsToMatch.size(); i != e; ++i) {
3419     TreePatternNode *Node = PatternsToMatch[i].getSrcPattern();
3420     if (!Node->isLeaf()) {
3421       PatternsByOpcode[getOpcodeName(Node->getOperator(), *this)].
3422         push_back(&PatternsToMatch[i]);
3423     } else {
3424       const ComplexPattern *CP;
3425       if (dynamic_cast<IntInit*>(Node->getLeafValue())) {
3426         PatternsByOpcode[getOpcodeName(getSDNodeNamed("imm"), *this)].
3427           push_back(&PatternsToMatch[i]);
3428       } else if ((CP = NodeGetComplexPattern(Node, *this))) {
3429         std::vector<Record*> OpNodes = CP->getRootNodes();
3430         for (unsigned j = 0, e = OpNodes.size(); j != e; j++) {
3431           PatternsByOpcode[getOpcodeName(OpNodes[j], *this)]
3432             .insert(PatternsByOpcode[getOpcodeName(OpNodes[j], *this)].begin(),
3433                     &PatternsToMatch[i]);
3434         }
3435       } else {
3436         std::cerr << "Unrecognized opcode '";
3437         Node->dump();
3438         std::cerr << "' on tree pattern '";
3439         std::cerr << 
3440            PatternsToMatch[i].getDstPattern()->getOperator()->getName();
3441         std::cerr << "'!\n";
3442         exit(1);
3443       }
3444     }
3445   }
3446
3447   // For each opcode, there might be multiple select functions, one per
3448   // ValueType of the node (or its first operand if it doesn't produce a
3449   // non-chain result.
3450   std::map<std::string, std::vector<std::string> > OpcodeVTMap;
3451
3452   // Emit one Select_* method for each top-level opcode.  We do this instead of
3453   // emitting one giant switch statement to support compilers where this will
3454   // result in the recursive functions taking less stack space.
3455   for (std::map<std::string, std::vector<PatternToMatch*> >::iterator
3456          PBOI = PatternsByOpcode.begin(), E = PatternsByOpcode.end();
3457        PBOI != E; ++PBOI) {
3458     const std::string &OpName = PBOI->first;
3459     std::vector<PatternToMatch*> &PatternsOfOp = PBOI->second;
3460     assert(!PatternsOfOp.empty() && "No patterns but map has entry?");
3461
3462     // We want to emit all of the matching code now.  However, we want to emit
3463     // the matches in order of minimal cost.  Sort the patterns so the least
3464     // cost one is at the start.
3465     std::stable_sort(PatternsOfOp.begin(), PatternsOfOp.end(),
3466                      PatternSortingPredicate(*this));
3467
3468     // Split them into groups by type.
3469     std::map<MVT::ValueType, std::vector<PatternToMatch*> > PatternsByType;
3470     for (unsigned i = 0, e = PatternsOfOp.size(); i != e; ++i) {
3471       PatternToMatch *Pat = PatternsOfOp[i];
3472       TreePatternNode *SrcPat = Pat->getSrcPattern();
3473       MVT::ValueType VT = SrcPat->getTypeNum(0);
3474       std::map<MVT::ValueType, std::vector<PatternToMatch*> >::iterator TI = 
3475         PatternsByType.find(VT);
3476       if (TI != PatternsByType.end())
3477         TI->second.push_back(Pat);
3478       else {
3479         std::vector<PatternToMatch*> PVec;
3480         PVec.push_back(Pat);
3481         PatternsByType.insert(std::make_pair(VT, PVec));
3482       }
3483     }
3484
3485     for (std::map<MVT::ValueType, std::vector<PatternToMatch*> >::iterator
3486            II = PatternsByType.begin(), EE = PatternsByType.end(); II != EE;
3487          ++II) {
3488       MVT::ValueType OpVT = II->first;
3489       std::vector<PatternToMatch*> &Patterns = II->second;
3490       typedef std::vector<std::pair<unsigned,std::string> > CodeList;
3491       typedef std::vector<std::pair<unsigned,std::string> >::iterator CodeListI;
3492     
3493       std::vector<std::pair<PatternToMatch*, CodeList> > CodeForPatterns;
3494       std::vector<std::vector<std::string> > PatternOpcodes;
3495       std::vector<std::vector<std::string> > PatternVTs;
3496       std::vector<std::set<std::string> > PatternDecls;
3497       for (unsigned i = 0, e = Patterns.size(); i != e; ++i) {
3498         CodeList GeneratedCode;
3499         std::set<std::string> GeneratedDecl;
3500         std::vector<std::string> TargetOpcodes;
3501         std::vector<std::string> TargetVTs;
3502         GenerateCodeForPattern(*Patterns[i], GeneratedCode, GeneratedDecl,
3503                                TargetOpcodes, TargetVTs);
3504         CodeForPatterns.push_back(std::make_pair(Patterns[i], GeneratedCode));
3505         PatternDecls.push_back(GeneratedDecl);
3506         PatternOpcodes.push_back(TargetOpcodes);
3507         PatternVTs.push_back(TargetVTs);
3508       }
3509     
3510       // Scan the code to see if all of the patterns are reachable and if it is
3511       // possible that the last one might not match.
3512       bool mightNotMatch = true;
3513       for (unsigned i = 0, e = CodeForPatterns.size(); i != e; ++i) {
3514         CodeList &GeneratedCode = CodeForPatterns[i].second;
3515         mightNotMatch = false;
3516
3517         for (unsigned j = 0, e = GeneratedCode.size(); j != e; ++j) {
3518           if (GeneratedCode[j].first == 1) { // predicate.
3519             mightNotMatch = true;
3520             break;
3521           }
3522         }
3523       
3524         // If this pattern definitely matches, and if it isn't the last one, the
3525         // patterns after it CANNOT ever match.  Error out.
3526         if (mightNotMatch == false && i != CodeForPatterns.size()-1) {
3527           std::cerr << "Pattern '";
3528           CodeForPatterns[i].first->getSrcPattern()->print(std::cerr);
3529           std::cerr << "' is impossible to select!\n";
3530           exit(1);
3531         }
3532       }
3533
3534       // Factor target node emission code (emitted by EmitResultCode) into
3535       // separate functions. Uniquing and share them among all instruction
3536       // selection routines.
3537       for (unsigned i = 0, e = CodeForPatterns.size(); i != e; ++i) {
3538         CodeList &GeneratedCode = CodeForPatterns[i].second;
3539         std::vector<std::string> &TargetOpcodes = PatternOpcodes[i];
3540         std::vector<std::string> &TargetVTs = PatternVTs[i];
3541         std::set<std::string> Decls = PatternDecls[i];
3542         std::vector<std::string> AddedInits;
3543         int CodeSize = (int)GeneratedCode.size();
3544         int LastPred = -1;
3545         for (int j = CodeSize-1; j >= 0; --j) {
3546           if (LastPred == -1 && GeneratedCode[j].first == 1)
3547             LastPred = j;
3548           else if (LastPred != -1 && GeneratedCode[j].first == 2)
3549             AddedInits.push_back(GeneratedCode[j].second);
3550         }
3551
3552         std::string CalleeCode = "(const SDOperand &N";
3553         std::string CallerCode = "(N";
3554         for (unsigned j = 0, e = TargetOpcodes.size(); j != e; ++j) {
3555           CalleeCode += ", unsigned Opc" + utostr(j);
3556           CallerCode += ", " + TargetOpcodes[j];
3557         }
3558         for (unsigned j = 0, e = TargetVTs.size(); j != e; ++j) {
3559           CalleeCode += ", MVT::ValueType VT" + utostr(j);
3560           CallerCode += ", " + TargetVTs[j];
3561         }
3562         for (std::set<std::string>::iterator
3563                I = Decls.begin(), E = Decls.end(); I != E; ++I) {
3564           std::string Name = *I;
3565           CalleeCode += ", SDOperand &" + Name;
3566           CallerCode += ", " + Name;
3567         }
3568         CallerCode += ");";
3569         CalleeCode += ") ";
3570         // Prevent emission routines from being inlined to reduce selection
3571         // routines stack frame sizes.
3572         CalleeCode += "DISABLE_INLINE ";
3573         CalleeCode += "{\n";
3574
3575         for (std::vector<std::string>::const_reverse_iterator
3576                I = AddedInits.rbegin(), E = AddedInits.rend(); I != E; ++I)
3577           CalleeCode += "  " + *I + "\n";
3578
3579         for (int j = LastPred+1; j < CodeSize; ++j)
3580           CalleeCode += "  " + GeneratedCode[j].second + "\n";
3581         for (int j = LastPred+1; j < CodeSize; ++j)
3582           GeneratedCode.pop_back();
3583         CalleeCode += "}\n";
3584
3585         // Uniquing the emission routines.
3586         unsigned EmitFuncNum;
3587         std::map<std::string, unsigned>::iterator EFI =
3588           EmitFunctions.find(CalleeCode);
3589         if (EFI != EmitFunctions.end()) {
3590           EmitFuncNum = EFI->second;
3591         } else {
3592           EmitFuncNum = EmitFunctions.size();
3593           EmitFunctions.insert(std::make_pair(CalleeCode, EmitFuncNum));
3594           OS << "SDNode *Emit_" << utostr(EmitFuncNum) << CalleeCode;
3595         }
3596
3597         // Replace the emission code within selection routines with calls to the
3598         // emission functions.
3599         CallerCode = "return Emit_" + utostr(EmitFuncNum) + CallerCode;
3600         GeneratedCode.push_back(std::make_pair(false, CallerCode));
3601       }
3602
3603       // Print function.
3604       std::string OpVTStr;
3605       if (OpVT == MVT::iPTR) {
3606         OpVTStr = "_iPTR";
3607       } else if (OpVT == MVT::isVoid) {
3608         // Nodes with a void result actually have a first result type of either
3609         // Other (a chain) or Flag.  Since there is no one-to-one mapping from
3610         // void to this case, we handle it specially here.
3611       } else {
3612         OpVTStr = "_" + getEnumName(OpVT).substr(5);  // Skip 'MVT::'
3613       }
3614       std::map<std::string, std::vector<std::string> >::iterator OpVTI =
3615         OpcodeVTMap.find(OpName);
3616       if (OpVTI == OpcodeVTMap.end()) {
3617         std::vector<std::string> VTSet;
3618         VTSet.push_back(OpVTStr);
3619         OpcodeVTMap.insert(std::make_pair(OpName, VTSet));
3620       } else
3621         OpVTI->second.push_back(OpVTStr);
3622
3623       OS << "SDNode *Select_" << getLegalCName(OpName)
3624          << OpVTStr << "(const SDOperand &N) {\n";    
3625
3626       // Loop through and reverse all of the CodeList vectors, as we will be
3627       // accessing them from their logical front, but accessing the end of a
3628       // vector is more efficient.
3629       for (unsigned i = 0, e = CodeForPatterns.size(); i != e; ++i) {
3630         CodeList &GeneratedCode = CodeForPatterns[i].second;
3631         std::reverse(GeneratedCode.begin(), GeneratedCode.end());
3632       }
3633     
3634       // Next, reverse the list of patterns itself for the same reason.
3635       std::reverse(CodeForPatterns.begin(), CodeForPatterns.end());
3636     
3637       // Emit all of the patterns now, grouped together to share code.
3638       EmitPatterns(CodeForPatterns, 2, OS);
3639     
3640       // If the last pattern has predicates (which could fail) emit code to
3641       // catch the case where nothing handles a pattern.
3642       if (mightNotMatch) {
3643         OS << "  std::cerr << \"Cannot yet select: \";\n";
3644         if (OpName != "ISD::INTRINSIC_W_CHAIN" &&
3645             OpName != "ISD::INTRINSIC_WO_CHAIN" &&
3646             OpName != "ISD::INTRINSIC_VOID") {
3647           OS << "  N.Val->dump(CurDAG);\n";
3648         } else {
3649           OS << "  unsigned iid = cast<ConstantSDNode>(N.getOperand("
3650             "N.getOperand(0).getValueType() == MVT::Other))->getValue();\n"
3651              << "  std::cerr << \"intrinsic %\"<< "
3652             "Intrinsic::getName((Intrinsic::ID)iid);\n";
3653         }
3654         OS << "  std::cerr << '\\n';\n"
3655            << "  abort();\n"
3656            << "  return NULL;\n";
3657       }
3658       OS << "}\n\n";
3659     }
3660   }
3661   
3662   // Emit boilerplate.
3663   OS << "SDNode *Select_INLINEASM(SDOperand N) {\n"
3664      << "  std::vector<SDOperand> Ops(N.Val->op_begin(), N.Val->op_end());\n"
3665      << "  AddToISelQueue(N.getOperand(0)); // Select the chain.\n\n"
3666      << "  // Select the flag operand.\n"
3667      << "  if (Ops.back().getValueType() == MVT::Flag)\n"
3668      << "    AddToISelQueue(Ops.back());\n"
3669      << "  SelectInlineAsmMemoryOperands(Ops, *CurDAG);\n"
3670      << "  std::vector<MVT::ValueType> VTs;\n"
3671      << "  VTs.push_back(MVT::Other);\n"
3672      << "  VTs.push_back(MVT::Flag);\n"
3673      << "  SDOperand New = CurDAG->getNode(ISD::INLINEASM, VTs, &Ops[0], "
3674                  "Ops.size());\n"
3675      << "  return New.Val;\n"
3676      << "}\n\n";
3677   
3678   OS << "// The main instruction selector code.\n"
3679      << "SDNode *SelectCode(SDOperand N) {\n"
3680      << "  if (N.getOpcode() >= ISD::BUILTIN_OP_END &&\n"
3681      << "      N.getOpcode() < (ISD::BUILTIN_OP_END+" << InstNS
3682      << "INSTRUCTION_LIST_END)) {\n"
3683      << "    return NULL;   // Already selected.\n"
3684      << "  }\n\n"
3685      << "  MVT::ValueType NVT = N.Val->getValueType(0);\n"
3686      << "  switch (N.getOpcode()) {\n"
3687      << "  default: break;\n"
3688      << "  case ISD::EntryToken:       // These leaves remain the same.\n"
3689      << "  case ISD::BasicBlock:\n"
3690      << "  case ISD::Register:\n"
3691      << "  case ISD::HANDLENODE:\n"
3692      << "  case ISD::TargetConstant:\n"
3693      << "  case ISD::TargetConstantPool:\n"
3694      << "  case ISD::TargetFrameIndex:\n"
3695      << "  case ISD::TargetJumpTable:\n"
3696      << "  case ISD::TargetGlobalAddress: {\n"
3697      << "    return NULL;\n"
3698      << "  }\n"
3699      << "  case ISD::AssertSext:\n"
3700      << "  case ISD::AssertZext: {\n"
3701      << "    AddToISelQueue(N.getOperand(0));\n"
3702      << "    ReplaceUses(N, N.getOperand(0));\n"
3703      << "    return NULL;\n"
3704      << "  }\n"
3705      << "  case ISD::TokenFactor:\n"
3706      << "  case ISD::CopyFromReg:\n"
3707      << "  case ISD::CopyToReg: {\n"
3708      << "    for (unsigned i = 0, e = N.getNumOperands(); i != e; ++i)\n"
3709      << "      AddToISelQueue(N.getOperand(i));\n"
3710      << "    return NULL;\n"
3711      << "  }\n"
3712      << "  case ISD::INLINEASM:  return Select_INLINEASM(N);\n";
3713
3714     
3715   // Loop over all of the case statements, emiting a call to each method we
3716   // emitted above.
3717   for (std::map<std::string, std::vector<PatternToMatch*> >::iterator
3718          PBOI = PatternsByOpcode.begin(), E = PatternsByOpcode.end();
3719        PBOI != E; ++PBOI) {
3720     const std::string &OpName = PBOI->first;
3721     // Potentially multiple versions of select for this opcode. One for each
3722     // ValueType of the node (or its first true operand if it doesn't produce a
3723     // result.
3724     std::map<std::string, std::vector<std::string> >::iterator OpVTI =
3725       OpcodeVTMap.find(OpName);
3726     std::vector<std::string> &OpVTs = OpVTI->second;
3727     OS << "  case " << OpName << ": {\n";
3728     if (OpVTs.size() == 1) {
3729       std::string &VTStr = OpVTs[0];
3730       OS << "    return Select_" << getLegalCName(OpName)
3731          << VTStr << "(N);\n";
3732     } else {
3733       // Keep track of whether we see a pattern that has an iPtr result.
3734       bool HasPtrPattern = false;
3735       bool HasDefaultPattern = false;
3736       
3737       OS << "    switch (NVT) {\n";
3738       for (unsigned i = 0, e = OpVTs.size(); i < e; ++i) {
3739         std::string &VTStr = OpVTs[i];
3740         if (VTStr.empty()) {
3741           HasDefaultPattern = true;
3742           continue;
3743         }
3744
3745         // If this is a match on iPTR: don't emit it directly, we need special
3746         // code.
3747         if (VTStr == "_iPTR") {
3748           HasPtrPattern = true;
3749           continue;
3750         }
3751         OS << "    case MVT::" << VTStr.substr(1) << ":\n"
3752            << "      return Select_" << getLegalCName(OpName)
3753            << VTStr << "(N);\n";
3754       }
3755       OS << "    default:\n";
3756       
3757       // If there is an iPTR result version of this pattern, emit it here.
3758       if (HasPtrPattern) {
3759         OS << "      if (NVT == TLI.getPointerTy())\n";
3760         OS << "        return Select_" << getLegalCName(OpName) <<"_iPTR(N);\n";
3761       }
3762       if (HasDefaultPattern) {
3763         OS << "      return Select_" << getLegalCName(OpName) << "(N);\n";
3764       }
3765       OS << "      break;\n";
3766       OS << "    }\n";
3767       OS << "    break;\n";
3768     }
3769     OS << "  }\n";
3770   }
3771
3772   OS << "  } // end of big switch.\n\n"
3773      << "  std::cerr << \"Cannot yet select: \";\n"
3774      << "  if (N.getOpcode() != ISD::INTRINSIC_W_CHAIN &&\n"
3775      << "      N.getOpcode() != ISD::INTRINSIC_WO_CHAIN &&\n"
3776      << "      N.getOpcode() != ISD::INTRINSIC_VOID) {\n"
3777      << "    N.Val->dump(CurDAG);\n"
3778      << "  } else {\n"
3779      << "    unsigned iid = cast<ConstantSDNode>(N.getOperand("
3780                "N.getOperand(0).getValueType() == MVT::Other))->getValue();\n"
3781      << "    std::cerr << \"intrinsic %\"<< "
3782                         "Intrinsic::getName((Intrinsic::ID)iid);\n"
3783      << "  }\n"
3784      << "  std::cerr << '\\n';\n"
3785      << "  abort();\n"
3786      << "  return NULL;\n"
3787      << "}\n";
3788 }
3789
3790 void DAGISelEmitter::run(std::ostream &OS) {
3791   EmitSourceFileHeader("DAG Instruction Selector for the " + Target.getName() +
3792                        " target", OS);
3793   
3794   OS << "// *** NOTE: This file is #included into the middle of the target\n"
3795      << "// *** instruction selector class.  These functions are really "
3796      << "methods.\n\n";
3797   
3798   OS << "#include \"llvm/Support/Compiler.h\"\n";
3799
3800   OS << "// Instruction selector priority queue:\n"
3801      << "std::vector<SDNode*> ISelQueue;\n";
3802   OS << "/// Keep track of nodes which have already been added to queue.\n"
3803      << "unsigned char *ISelQueued;\n";
3804   OS << "/// Keep track of nodes which have already been selected.\n"
3805      << "unsigned char *ISelSelected;\n";
3806   OS << "/// Dummy parameter to ReplaceAllUsesOfValueWith().\n"
3807      << "std::vector<SDNode*> ISelKilled;\n\n";
3808
3809   OS << "/// IsChainCompatible - Returns true if Chain is Op or Chain does\n";
3810   OS << "/// not reach Op.\n";
3811   OS << "static bool IsChainCompatible(SDNode *Chain, SDNode *Op) {\n";
3812   OS << "  if (Chain->getOpcode() == ISD::EntryToken)\n";
3813   OS << "    return true;\n";
3814   OS << "  else if (Chain->getOpcode() == ISD::TokenFactor)\n";
3815   OS << "    return false;\n";
3816   OS << "  else if (Chain->getNumOperands() > 0) {\n";
3817   OS << "    SDOperand C0 = Chain->getOperand(0);\n";
3818   OS << "    if (C0.getValueType() == MVT::Other)\n";
3819   OS << "      return C0.Val != Op && IsChainCompatible(C0.Val, Op);\n";
3820   OS << "  }\n";
3821   OS << "  return true;\n";
3822   OS << "}\n";
3823
3824   OS << "/// Sorting functions for the selection queue.\n"
3825      << "struct isel_sort : public std::binary_function"
3826      << "<SDNode*, SDNode*, bool> {\n"
3827      << "  bool operator()(const SDNode* left, const SDNode* right) "
3828      << "const {\n"
3829      << "    return (left->getNodeId() > right->getNodeId());\n"
3830      << "  }\n"
3831      << "};\n\n";
3832
3833   OS << "inline void setQueued(int Id) {\n";
3834   OS << "  ISelQueued[Id / 8] |= 1 << (Id % 8);\n";
3835   OS << "}\n";
3836   OS << "inline bool isQueued(int Id) {\n";
3837   OS << "  return ISelQueued[Id / 8] & (1 << (Id % 8));\n";
3838   OS << "}\n";
3839   OS << "inline void setSelected(int Id) {\n";
3840   OS << "  ISelSelected[Id / 8] |= 1 << (Id % 8);\n";
3841   OS << "}\n";
3842   OS << "inline bool isSelected(int Id) {\n";
3843   OS << "  return ISelSelected[Id / 8] & (1 << (Id % 8));\n";
3844   OS << "}\n\n";
3845
3846   OS << "void AddToISelQueue(SDOperand N) DISABLE_INLINE {\n";
3847   OS << "  int Id = N.Val->getNodeId();\n";
3848   OS << "  if (Id != -1 && !isQueued(Id)) {\n";
3849   OS << "    ISelQueue.push_back(N.Val);\n";
3850  OS << "    std::push_heap(ISelQueue.begin(), ISelQueue.end(), isel_sort());\n";
3851   OS << "    setQueued(Id);\n";
3852   OS << "  }\n";
3853   OS << "}\n\n";
3854
3855   OS << "inline void RemoveKilled() {\n";
3856 OS << "  unsigned NumKilled = ISelKilled.size();\n";
3857   OS << "  if (NumKilled) {\n";
3858   OS << "    for (unsigned i = 0; i != NumKilled; ++i) {\n";
3859   OS << "      SDNode *Temp = ISelKilled[i];\n";
3860   OS << "      ISelQueue.erase(std::remove(ISelQueue.begin(), ISelQueue.end(), "
3861      << "Temp), ISelQueue.end());\n";
3862   OS << "    };\n";
3863  OS << "    std::make_heap(ISelQueue.begin(), ISelQueue.end(), isel_sort());\n";
3864   OS << "    ISelKilled.clear();\n";
3865   OS << "  }\n";
3866   OS << "}\n\n";
3867
3868   OS << "void ReplaceUses(SDOperand F, SDOperand T) DISABLE_INLINE {\n";
3869   OS << "  CurDAG->ReplaceAllUsesOfValueWith(F, T, ISelKilled);\n";
3870   OS << "  setSelected(F.Val->getNodeId());\n";
3871   OS << "  RemoveKilled();\n";
3872   OS << "}\n";
3873   OS << "inline void ReplaceUses(SDNode *F, SDNode *T) {\n";
3874   OS << "  CurDAG->ReplaceAllUsesWith(F, T, &ISelKilled);\n";
3875   OS << "  setSelected(F->getNodeId());\n";
3876   OS << "  RemoveKilled();\n";
3877   OS << "}\n\n";
3878
3879   OS << "// SelectRoot - Top level entry to DAG isel.\n";
3880   OS << "SDOperand SelectRoot(SDOperand Root) {\n";
3881   OS << "  SelectRootInit();\n";
3882   OS << "  unsigned NumBytes = (DAGSize + 7) / 8;\n";
3883   OS << "  ISelQueued   = new unsigned char[NumBytes];\n";
3884   OS << "  ISelSelected = new unsigned char[NumBytes];\n";
3885   OS << "  memset(ISelQueued,   0, NumBytes);\n";
3886   OS << "  memset(ISelSelected, 0, NumBytes);\n";
3887   OS << "\n";
3888   OS << "  // Create a dummy node (which is not added to allnodes), that adds\n"
3889      << "  // a reference to the root node, preventing it from being deleted,\n"
3890      << "  // and tracking any changes of the root.\n"
3891      << "  HandleSDNode Dummy(CurDAG->getRoot());\n"
3892      << "  ISelQueue.push_back(CurDAG->getRoot().Val);\n";
3893   OS << "  while (!ISelQueue.empty()) {\n";
3894   OS << "    SDNode *Node = ISelQueue.front();\n";
3895   OS << "    std::pop_heap(ISelQueue.begin(), ISelQueue.end(), isel_sort());\n";
3896   OS << "    ISelQueue.pop_back();\n";
3897   OS << "    if (!isSelected(Node->getNodeId())) {\n";
3898   OS << "      SDNode *ResNode = Select(SDOperand(Node, 0));\n";
3899   OS << "      if (ResNode != Node) {\n";
3900   OS << "        if (ResNode)\n";
3901   OS << "          ReplaceUses(Node, ResNode);\n";
3902   OS << "        if (Node->use_empty()) { // Don't delete EntryToken, etc.\n";
3903   OS << "          CurDAG->RemoveDeadNode(Node, ISelKilled);\n";
3904   OS << "          RemoveKilled();\n";
3905   OS << "        }\n";
3906   OS << "      }\n";
3907   OS << "    }\n";
3908   OS << "  }\n";
3909   OS << "\n";
3910   OS << "  delete[] ISelQueued;\n";
3911   OS << "  ISelQueued = NULL;\n";
3912   OS << "  delete[] ISelSelected;\n";
3913   OS << "  ISelSelected = NULL;\n";
3914   OS << "  return Dummy.getValue();\n";
3915   OS << "}\n";
3916   
3917   Intrinsics = LoadIntrinsics(Records);
3918   ParseNodeInfo();
3919   ParseNodeTransforms(OS);
3920   ParseComplexPatterns();
3921   ParsePatternFragments(OS);
3922   ParsePredicateOperands();
3923   ParseInstructions();
3924   ParsePatterns();
3925   
3926   // Generate variants.  For example, commutative patterns can match
3927   // multiple ways.  Add them to PatternsToMatch as well.
3928   GenerateVariants();
3929
3930   
3931   DEBUG(std::cerr << "\n\nALL PATTERNS TO MATCH:\n\n";
3932         for (unsigned i = 0, e = PatternsToMatch.size(); i != e; ++i) {
3933           std::cerr << "PATTERN: ";  PatternsToMatch[i].getSrcPattern()->dump();
3934           std::cerr << "\nRESULT:  ";PatternsToMatch[i].getDstPattern()->dump();
3935           std::cerr << "\n";
3936         });
3937   
3938   // At this point, we have full information about the 'Patterns' we need to
3939   // parse, both implicitly from instructions as well as from explicit pattern
3940   // definitions.  Emit the resultant instruction selector.
3941   EmitInstructionSelector(OS);  
3942   
3943   for (std::map<Record*, TreePattern*>::iterator I = PatternFragments.begin(),
3944        E = PatternFragments.end(); I != E; ++I)
3945     delete I->second;
3946   PatternFragments.clear();
3947
3948   Instructions.clear();
3949 }