[llvm] [SCEVExpander] Add SCEVUseVisitor and use it in SCEVExpander (NFC) (PR #188863)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 1 03:17:38 PDT 2026
================
@@ -68,21 +68,26 @@ LLVM_ABI extern bool VerifySCEV;
class SCEV;
-struct SCEVUse : PointerIntPair<const SCEV *, 2> {
- SCEVUse() : PointerIntPair() { setFromOpaqueValue(nullptr); }
- SCEVUse(const SCEV *S) : PointerIntPair() {
- setFromOpaqueValue(reinterpret_cast<void *>(const_cast<SCEV *>(S)));
- }
- SCEVUse(const SCEV *S, unsigned Flags) : PointerIntPair(S, Flags) {}
+template <typename SCEVPtrT = const SCEV *>
+struct SCEVUseT : PointerIntPair<SCEVPtrT, 2> {
+ using Base = PointerIntPair<SCEVPtrT, 2>;
+
+ SCEVUseT() : Base() { Base::setFromOpaqueValue(nullptr); }
+ SCEVUseT(SCEVPtrT S) : SCEVUseT(S, 0) {}
+ SCEVUseT(SCEVPtrT S, unsigned Flags) : Base(S, Flags) {}
+ template <typename OtherPtrT, typename = std::enable_if_t<
+ std::is_convertible_v<OtherPtrT, SCEVPtrT>>>
+ SCEVUseT(const SCEVUseT<OtherPtrT> &Other)
+ : Base(Other.getPointer(), Other.getInt()) {}
- operator const SCEV *() const { return getPointer(); }
- const SCEV *operator->() const { return getPointer(); }
+ operator const SCEV *() const { return Base::getPointer(); }
----------------
fhahn wrote:
done thanks
https://github.com/llvm/llvm-project/pull/188863
More information about the llvm-commits
mailing list