From e0583b1b925ed7bfe92807919168ff10c5542d8c Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 14 Oct 2005 05:08:37 +0000 Subject: [PATCH] simplify the code a bit git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23728 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/TableGen/DAGISelEmitter.cpp | 44 +++++++++++++------------------ 1 file changed, 18 insertions(+), 26 deletions(-) diff --git a/utils/TableGen/DAGISelEmitter.cpp b/utils/TableGen/DAGISelEmitter.cpp index 8cbed47e084..69757e9700d 100644 --- a/utils/TableGen/DAGISelEmitter.cpp +++ b/utils/TableGen/DAGISelEmitter.cpp @@ -63,6 +63,16 @@ TreePatternNode *SDTypeConstraint::getOperandNum(unsigned OpNo, return N->getChild(OpNo-NumResults); } +template +static std::vector +FilterVTs(const std::vector &InVTs, T Filter) { + std::vector Result; + for (unsigned i = 0, e = InVTs.size(); i != e; ++i) + if (Filter(InVTs[i])) + Result.push_back(InVTs[i]); + return Result; +} + /// ApplyTypeConstraint - Given a node in a pattern, apply this type /// constraint to the nodes operands. This returns true if it makes a /// change, false otherwise. If a type contradiction is found, throw an @@ -94,21 +104,12 @@ bool SDTypeConstraint::ApplyTypeConstraint(TreePatternNode *N, NodeToApply->UpdateNodeType(MVT::i1, TP); // throw an error. // If there is only one integer type supported, this must be it. - const std::vector &VTs = CGT.getLegalValueTypes(); - MVT::ValueType VT = MVT::LAST_VALUETYPE; - for (unsigned i = 0, e = VTs.size(); i != e; ++i) - if (MVT::isInteger(VTs[i])) { - if (VT == MVT::LAST_VALUETYPE) - VT = VTs[i]; // First integer type we've found. - else { - VT = MVT::LAST_VALUETYPE; - break; - } - } + std::vector IntVTs = + FilterVTs(CGT.getLegalValueTypes(), MVT::isInteger); // If we found exactly one supported integer type, apply it. - if (VT != MVT::LAST_VALUETYPE) - return NodeToApply->UpdateNodeType(VT, TP); + if (IntVTs.size() == 1) + return NodeToApply->UpdateNodeType(IntVTs[0], TP); return false; } case SDTCisFP: { @@ -117,21 +118,12 @@ bool SDTypeConstraint::ApplyTypeConstraint(TreePatternNode *N, NodeToApply->UpdateNodeType(MVT::f32, TP); // throw an error. // If there is only one FP type supported, this must be it. - const std::vector &VTs = CGT.getLegalValueTypes(); - MVT::ValueType VT = MVT::LAST_VALUETYPE; - for (unsigned i = 0, e = VTs.size(); i != e; ++i) - if (MVT::isFloatingPoint(VTs[i])) { - if (VT == MVT::LAST_VALUETYPE) - VT = VTs[i]; // First integer type we've found. - else { - VT = MVT::LAST_VALUETYPE; - break; - } - } + std::vector FPVTs = + FilterVTs(CGT.getLegalValueTypes(), MVT::isFloatingPoint); // If we found exactly one supported FP type, apply it. - if (VT != MVT::LAST_VALUETYPE) - return NodeToApply->UpdateNodeType(VT, TP); + if (FPVTs.size() == 1) + return NodeToApply->UpdateNodeType(FPVTs[0], TP); return false; } case SDTCisSameAs: { -- 2.34.1