From 15766ec56623c80fa9771fc15e8f468fd4b77e6c Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Thu, 3 Dec 2015 05:57:37 +0000 Subject: [PATCH] [TableGen] Remove an assumption about the order of encodings in the MVT::SimpleValueType enum. Instead of assuming the types are sorted by size, scan the typeset arrays to find the smallest/largest type. NFC git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@254589 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/TableGen/CodeGenDAGPatterns.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/utils/TableGen/CodeGenDAGPatterns.cpp b/utils/TableGen/CodeGenDAGPatterns.cpp index 3f74a9999c9..3ebe51e0512 100644 --- a/utils/TableGen/CodeGenDAGPatterns.cpp +++ b/utils/TableGen/CodeGenDAGPatterns.cpp @@ -388,7 +388,13 @@ bool EEVT::TypeSet::EnforceSmallerThan(EEVT::TypeSet &Other, TreePattern &TP) { // the size of the smallest type. { TypeSet InputSet(Other); - MVT Smallest = TypeVec[0]; + MVT Smallest = *std::min_element(TypeVec.begin(), TypeVec.end(), + [](MVT A, MVT B) { + return A.getScalarSizeInBits() < B.getScalarSizeInBits() || + (A.getScalarSizeInBits() == B.getScalarSizeInBits() && + A.getSizeInBits() < B.getSizeInBits()); + }); + auto I = std::remove_if(Other.TypeVec.begin(), Other.TypeVec.end(), [Smallest](MVT OtherVT) { // Don't compare vector and non-vector types. @@ -416,7 +422,12 @@ bool EEVT::TypeSet::EnforceSmallerThan(EEVT::TypeSet &Other, TreePattern &TP) { // the size of the largest type. { TypeSet InputSet(*this); - MVT Largest = Other.TypeVec[Other.TypeVec.size()-1]; + MVT Largest = *std::max_element(Other.TypeVec.begin(), Other.TypeVec.end(), + [](MVT A, MVT B) { + return A.getScalarSizeInBits() < B.getScalarSizeInBits() || + (A.getScalarSizeInBits() == B.getScalarSizeInBits() && + A.getSizeInBits() < B.getSizeInBits()); + }); auto I = std::remove_if(TypeVec.begin(), TypeVec.end(), [Largest](MVT OtherVT) { // Don't compare vector and non-vector types. -- 2.34.1