[llvm] [polly] [SCEV] Introduce SCEVUse, use it instead of const SCEV * (NFCI). (PR #91961)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 4 09:06:35 PST 2026
================
@@ -66,6 +66,78 @@ enum SCEVTypes : unsigned short;
LLVM_ABI extern bool VerifySCEV;
+class SCEV;
+
+struct SCEVUse : PointerIntPair<const SCEV *, 2> {
+ SCEVUse() : PointerIntPair() { setFromOpaqueValue(nullptr); }
+ SCEVUse(const SCEV *S) : PointerIntPair() { setFromOpaqueValue((void *)S); }
+ SCEVUse(const SCEV *S, unsigned Flags) : PointerIntPair(S, Flags) {}
+
+ operator const SCEV *() const { return getPointer(); }
+ const SCEV *operator->() const { return getPointer(); }
+
+ void *getRawPointer() const { return getOpaqueValue(); }
+
+ unsigned getFlags() const { return getInt(); }
+
+ bool operator==(const SCEVUse &RHS) const {
+ return getRawPointer() == RHS.getRawPointer();
+ }
+
+ bool operator==(const SCEV *RHS) const { return getRawPointer() == RHS; }
+
+ /// Print out the internal representation of this scalar to the specified
+ /// stream. This should really only be used for debugging purposes.
+ void print(raw_ostream &OS) const;
+
+ /// This method is used for debugging.
+ void dump() const;
+};
+
+/// Provide PointerLikeTypeTraits for SCEVUse, so it can be used with
+/// SmallPtrSet, among others.
+template <> struct PointerLikeTypeTraits<SCEVUse> {
+ static inline void *getAsVoidPointer(SCEVUse U) { return U.getOpaqueValue(); }
+ static inline SCEVUse getFromVoidPointer(void *P) {
+ SCEVUse U;
+ U.setFromOpaqueValue(P);
+ return U;
+ }
+
+ /// The Low bits are used by the PointerIntPair.
+ static constexpr int NumLowBitsAvailable = 0;
+};
+
+template <> struct DenseMapInfo<SCEVUse> {
+ static constexpr uintptr_t Log2MaxAlign = 12;
----------------
fhahn wrote:
removed thanks
https://github.com/llvm/llvm-project/pull/91961
More information about the llvm-commits
mailing list