Author: Krzysztof Parzyszek Date: 2022-12-10T14:03:29-06:00 New Revision: 29041bc0507f2b04d116ee3150bfd61ea01c5565
URL: https://github.com/llvm/llvm-project/commit/29041bc0507f2b04d116ee3150bfd61ea01c5565 DIFF: https://github.com/llvm/llvm-project/commit/29041bc0507f2b04d116ee3150bfd61ea01c5565.diff LOG: [APInt] Convert GetMostSignificantDifferentBit to std::optional Added: Modified: clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.h llvm/include/llvm/ADT/APInt.h llvm/lib/IR/ConstantRange.cpp llvm/lib/Support/APInt.cpp llvm/unittests/ADT/APIntTest.cpp Removed: ################################################################################ diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.h b/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.h index e10ee4ae7a145..5815742d57ac7 100644 --- a/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.h +++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.h @@ -10,6 +10,7 @@ #define LLVM_CLANG_ANALYZER_WEBKIT_PTRTYPESEMANTICS_H #include "llvm/ADT/APInt.h" +#include "llvm/ADT/Optional.h" namespace clang { class CXXBaseSpecifier; diff --git a/llvm/include/llvm/ADT/APInt.h b/llvm/include/llvm/ADT/APInt.h index c8ca617360c89..15e696ef91935 100644 --- a/llvm/include/llvm/ADT/APInt.h +++ b/llvm/include/llvm/ADT/APInt.h @@ -31,7 +31,6 @@ class raw_ostream; template <typename T> class SmallVectorImpl; template <typename T> class ArrayRef; -template <typename T> class Optional; template <typename T, typename Enable> struct DenseMapInfo; class APInt; @@ -2254,8 +2253,8 @@ std::optional<APInt> SolveQuadraticEquationWrap(APInt A, APInt B, APInt C, /// Compare two values, and if they are diff erent, return the position of the /// most significant bit that is diff erent in the values. -Optional<unsigned> GetMostSignificantDifferentBit(const APInt &A, - const APInt &B); +std::optional<unsigned> GetMostSignificantDifferentBit(const APInt &A, + const APInt &B); /// Splat/Merge neighboring bits to widen/narrow the bitmask represented /// by \param A to \param NewBitWidth bits. diff --git a/llvm/lib/IR/ConstantRange.cpp b/llvm/lib/IR/ConstantRange.cpp index bae1e550a6a3d..2f0d3d1e3a5ac 100644 --- a/llvm/lib/IR/ConstantRange.cpp +++ b/llvm/lib/IR/ConstantRange.cpp @@ -37,6 +37,7 @@ #include <algorithm> #include <cassert> #include <cstdint> +#include <optional> using namespace llvm; @@ -85,7 +86,7 @@ KnownBits ConstantRange::toKnownBits() const { APInt Min = getUnsignedMin(); APInt Max = getUnsignedMax(); KnownBits Known = KnownBits::makeConstant(Min); - if (Optional<unsigned> DifferentBit = + if (std::optional<unsigned> DifferentBit = APIntOps::GetMostSignificantDifferentBit(Min, Max)) { Known.Zero.clearLowBits(*DifferentBit + 1); Known.One.clearLowBits(*DifferentBit + 1); diff --git a/llvm/lib/Support/APInt.cpp b/llvm/lib/Support/APInt.cpp index b19de75a68f43..db55fd02396d6 100644 --- a/llvm/lib/Support/APInt.cpp +++ b/llvm/lib/Support/APInt.cpp @@ -2961,7 +2961,7 @@ llvm::APIntOps::SolveQuadraticEquationWrap(APInt A, APInt B, APInt C, return X; } -Optional<unsigned> +std::optional<unsigned> llvm::APIntOps::GetMostSignificantDifferentBit(const APInt &A, const APInt &B) { assert(A.getBitWidth() == B.getBitWidth() && "Must have the same bitwidth"); if (A == B) diff --git a/llvm/unittests/ADT/APIntTest.cpp b/llvm/unittests/ADT/APIntTest.cpp index b306a6d370645..3055581c7dd30 100644 --- a/llvm/unittests/ADT/APIntTest.cpp +++ b/llvm/unittests/ADT/APIntTest.cpp @@ -13,6 +13,7 @@ #include "llvm/ADT/Twine.h" #include "gtest/gtest.h" #include <array> +#include <optional> using namespace llvm; @@ -2956,7 +2957,7 @@ TEST(APIntTest, GetMostSignificantDifferentBit) { TEST(APIntTest, GetMostSignificantDifferentBitExaustive) { auto GetHighestDifferentBitBruteforce = - [](const APInt &V0, const APInt &V1) -> llvm::Optional<unsigned> { + [](const APInt &V0, const APInt &V1) -> std::optional<unsigned> { assert(V0.getBitWidth() == V1.getBitWidth() && "Must have same bitwidth"); if (V0 == V1) return std::nullopt; // Bitwise identical. _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits