Changes in directory llvm/utils/TableGen:
DAGISelEmitter.cpp updated: 1.182 -> 1.183 --- Log message: Allow result node to be a simple leaf node. This enable bitconvert patterns like this: def : Pat<(v4i32 (bitconvert (v4f32 VR128:$src))), (v4i32 VR128:$src)>; --- Diffs of the changes: (+9 -4) DAGISelEmitter.cpp | 13 +++++++++---- 1 files changed, 9 insertions(+), 4 deletions(-) Index: llvm/utils/TableGen/DAGISelEmitter.cpp diff -u llvm/utils/TableGen/DAGISelEmitter.cpp:1.182 llvm/utils/TableGen/DAGISelEmitter.cpp:1.183 --- llvm/utils/TableGen/DAGISelEmitter.cpp:1.182 Tue Mar 21 14:44:17 2006 +++ llvm/utils/TableGen/DAGISelEmitter.cpp Wed Mar 22 20:35:32 2006 @@ -1459,8 +1459,10 @@ } ResultNodeOperands.push_back(OpNode); } - DstPattern = new TreePatternNode(Result->getOnlyTree()->getOperator(), - ResultNodeOperands); + DstPattern = Result->getOnlyTree(); + if (!DstPattern->isLeaf()) + DstPattern = new TreePatternNode(DstPattern->getOperator(), + ResultNodeOperands); DstPattern->setTypes(Result->getOnlyTree()->getExtTypes()); TreePattern Temp(Result->getRecord(), DstPattern, false, *this); Temp.InferAllTypes(); @@ -2191,7 +2193,6 @@ EmitResultCode(TreePatternNode *N, bool LikeLeaf = false, bool isRoot = false) { // This is something selected from the pattern we matched. if (!N->getName().empty()) { - assert(!isRoot && "Root of pattern cannot be a leaf!"); std::string &Val = VariableMap[N->getName()]; assert(!Val.empty() && "Variable referenced but not defined and not caught earlier!"); @@ -2276,13 +2277,17 @@ emitCode("Tmp" + utostr(ResNo) + " = " + Val + ";"); else emitCode("Select(Tmp" + utostr(ResNo) + ", " + Val + ");"); + + if (isRoot && N->isLeaf()) { + emitCode("Result = Tmp" + utostr(ResNo) + ";"); + emitCode("return;"); + } } // Add Tmp<ResNo> to VariableMap, so that we don't multiply select this // value if used multiple times by this pattern result. Val = "Tmp"+utostr(ResNo); return std::make_pair(NumRes, ResNo); } - if (N->isLeaf()) { // If this is an explicit register reference, handle it. if (DefInit *DI = dynamic_cast<DefInit*>(N->getLeafValue())) { _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits