From 495a5e94baadefa6ed50390e6655021c127ea266 Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Thu, 24 Sep 2020 16:47:15 -0700 Subject: [PATCH] Revert "[NFCI][IR] ConstantRangeTest: add basic scaffolding for next-gen precision/correctness testing" This reverts commit 9bcf7b1c7a139a455400df109d81c638b9e75150. Breaks build with MSVC. --- llvm/unittests/IR/ConstantRangeTest.cpp | 90 +-------------------------------- 1 file changed, 2 insertions(+), 88 deletions(-) diff --git a/llvm/unittests/IR/ConstantRangeTest.cpp b/llvm/unittests/IR/ConstantRangeTest.cpp index 6e574dc..5e8a98e 100644 --- a/llvm/unittests/IR/ConstantRangeTest.cpp +++ b/llvm/unittests/IR/ConstantRangeTest.cpp @@ -59,12 +59,6 @@ static void ForeachNumInConstantRange(const ConstantRange &CR, Fn TestFn) { } } -unsigned GetNumValuesInConstantRange(const ConstantRange &CR) { - unsigned NumValues = 0; - ForeachNumInConstantRange(CR, [&NumValues](const APInt &) { ++NumValues; }); - return NumValues; -} - struct OpRangeGathererBase { void account(const APInt &N); ConstantRange getRange(); @@ -113,79 +107,6 @@ struct SignedOpRangeGatherer : public OpRangeGathererBase { } }; -struct AccumulatedPrecisionData { - unsigned NumActualValues; - unsigned NumValuesInActualCR; - unsigned NumValuesInExactCR; - - // If NumValuesInActualCR and NumValuesInExactCR are identical, and are not - // equal to the NumActualValues, then the implementation is - // overly conservatively correct, i.e. imprecise. - - void reset() { - NumActualValues = 0; - NumValuesInActualCR = 0; - NumValuesInExactCR = 0; - } -}; - -template -static void TestUnaryOpExhaustive(Fn1 RangeFn, Fn2 IntFn, - AccumulatedPrecisionData &Total) { - Total.reset(); - - constexpr unsigned Bits = 4; - - EnumerateConstantRanges(Bits, [&](const ConstantRange &CR) { - // We'll want to record each true new value, for precision testing. - SmallDenseSet ExactValues; - - // What constant range does ConstantRange method return? - ConstantRange ActualCR = RangeFn(CR); - - // We'll want to sanity-check the ActualCR, so this will build our own CR. - OpRangeGathererTy ExactR(CR.getBitWidth()); - - // Let's iterate for each value in the original constant range. - ForeachNumInConstantRange(CR, [&](const APInt &N) { - // For this singular value, what is the true new value? - const APInt NewN = IntFn(N); - - // Constant range provided by ConstantRange method must be conservatively - // correct, it must contain the true new value. - EXPECT_TRUE(ActualCR.contains(NewN)); - - // Record this true new value in our own constant range. - ExactR.account(NewN); - - // And record the new true value itself. - ExactValues.insert(NewN); - }); - - // So, what range did we grok by exhaustively looking over each value? - ConstantRange ExactCR = ExactR.getRange(); - - // So, how many new values are there actually, and as per the ranges? - unsigned NumActualValues = ExactValues.size(); - unsigned NumValuesInExactCR = GetNumValuesInConstantRange(ExactCR); - unsigned NumValuesInActualCR = GetNumValuesInConstantRange(ActualCR); - - // Ranges should contain at least as much values as there actually was, - // but it is possible they will contain extras. - EXPECT_GE(NumValuesInExactCR, NumActualValues); - EXPECT_GE(NumValuesInActualCR, NumActualValues); - - // We expect that OpRangeGathererTy produces the exactly identical range - // to what the ConstantRange method does. - EXPECT_EQ(ExactR.getRange(), ActualCR); - - // For precision testing, accumulate the overall numbers. - Total.NumActualValues += NumActualValues; - Total.NumValuesInActualCR += NumValuesInActualCR; - Total.NumValuesInExactCR += NumValuesInExactCR; - }); -} - template static void TestUnsignedUnaryOpExhaustive(Fn1 RangeFn, Fn2 IntFn, bool SkipSignedIntMin = false) { @@ -2479,16 +2400,9 @@ TEST_F(ConstantRangeTest, binaryXor) { } TEST_F(ConstantRangeTest, binaryNot) { - AccumulatedPrecisionData Precision; - - TestUnaryOpExhaustive( + TestUnsignedUnaryOpExhaustive( [](const ConstantRange &CR) { return CR.binaryNot(); }, - [](const APInt &N) { return ~N; }, Precision); - // FIXME: the implementation is not precise. - EXPECT_EQ(Precision.NumActualValues, 1936u); - EXPECT_EQ(Precision.NumValuesInActualCR, 2496u); - EXPECT_EQ(Precision.NumValuesInExactCR, 2496u); - + [](const APInt &N) { return ~N; }); TestUnsignedUnaryOpExhaustive( [](const ConstantRange &CR) { return CR.binaryXor( -- 1.8.3.1