From b4ad33c4aedc124f956ff6866fc73db14be534ee Mon Sep 17 00:00:00 2001 From: Evan Cheng Date: Thu, 19 Jan 2006 01:55:45 +0000 Subject: [PATCH] Prevent unnecessary CopyToReg when the same HW register appears in two spots in the pattern. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25437 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/TableGen/DAGISelEmitter.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/utils/TableGen/DAGISelEmitter.cpp b/utils/TableGen/DAGISelEmitter.cpp index daf63a8dddc..cd0527729af 100644 --- a/utils/TableGen/DAGISelEmitter.cpp +++ b/utils/TableGen/DAGISelEmitter.cpp @@ -1835,6 +1835,7 @@ private: std::map OperatorMap; // Names of all the folded nodes which produce chains. std::vector > FoldedChains; + std::set Duplicates; unsigned TmpNo; public: @@ -1952,6 +1953,7 @@ public: // previously named thing. OS << " if (" << VarMapEntry << " != " << RootName << OpNo << ") goto P" << PatternNo << "Fail;\n"; + Duplicates.insert(RootName + utostr(OpNo)); continue; } } @@ -2351,6 +2353,13 @@ private: EmitCopyToRegs(Child, RootName + utostr(OpNo), ChainEmitted); } else { if (DefInit *DI = dynamic_cast(Child->getLeafValue())) { + if (!Child->getName().empty()) { + std::string Name = RootName + utostr(OpNo); + if (Duplicates.find(Name) != Duplicates.end()) + // A duplicate! Do not emit a copy for this node. + continue; + } + Record *RR = DI->getDef(); if (RR->isSubClassOf("Register")) { MVT::ValueType RVT = getRegisterValueType(RR, T);