[Attributor][NFC] Move DerefState to header and use StateWrapper

Summary: In D65402, I want to get DerefState from AADereferenceable but it was not allowed. This patch moves DerefState definition into Attributor.h and makes AADerefenceable inherit StateWrapper.

Reviewers: jdoerfert, sstefan1

Reviewed By: jdoerfert

Subscribers: hiraditya, jfb, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D66585

llvm-svn: 369653
diff --git a/llvm/lib/Transforms/IPO/Attributor.cpp b/llvm/lib/Transforms/IPO/Attributor.cpp
index 6caa027..ede72d7 100644
--- a/llvm/lib/Transforms/IPO/Attributor.cpp
+++ b/llvm/lib/Transforms/IPO/Attributor.cpp
@@ -1890,78 +1890,6 @@
 
 /// -------------------- Dereferenceable Argument Attribute --------------------
 
-struct DerefState : AbstractState {
-
-  /// State representing for dereferenceable bytes.
-  IntegerState DerefBytesState;
-
-  /// State representing that whether the value is globaly dereferenceable.
-  BooleanState GlobalState;
-
-  /// See AbstractState::isValidState()
-  bool isValidState() const override { return DerefBytesState.isValidState(); }
-
-  /// See AbstractState::isAtFixpoint()
-  bool isAtFixpoint() const override {
-    return !isValidState() ||
-           (DerefBytesState.isAtFixpoint() && GlobalState.isAtFixpoint());
-  }
-
-  /// See AbstractState::indicateOptimisticFixpoint(...)
-  ChangeStatus indicateOptimisticFixpoint() override {
-    DerefBytesState.indicateOptimisticFixpoint();
-    GlobalState.indicateOptimisticFixpoint();
-    return ChangeStatus::UNCHANGED;
-  }
-
-  /// See AbstractState::indicatePessimisticFixpoint(...)
-  ChangeStatus indicatePessimisticFixpoint() override {
-    DerefBytesState.indicatePessimisticFixpoint();
-    GlobalState.indicatePessimisticFixpoint();
-    return ChangeStatus::CHANGED;
-  }
-
-  /// Update known dereferenceable bytes.
-  void takeKnownDerefBytesMaximum(uint64_t Bytes) {
-    DerefBytesState.takeKnownMaximum(Bytes);
-  }
-
-  /// Update assumed dereferenceable bytes.
-  void takeAssumedDerefBytesMinimum(uint64_t Bytes) {
-    DerefBytesState.takeAssumedMinimum(Bytes);
-  }
-
-  /// Equality for DerefState.
-  bool operator==(const DerefState &R) {
-    return this->DerefBytesState == R.DerefBytesState &&
-           this->GlobalState == R.GlobalState;
-  }
-
-  /// Inequality for IntegerState.
-  bool operator!=(const DerefState &R) { return !(*this == R); }
-
-  /// See IntegerState::operator^=
-  DerefState operator^=(const DerefState &R) {
-    DerefBytesState ^= R.DerefBytesState;
-    GlobalState ^= R.GlobalState;
-    return *this;
-  }
-
-  /// See IntegerState::operator&=
-  DerefState operator&=(const DerefState &R) {
-    DerefBytesState &= R.DerefBytesState;
-    GlobalState &= R.GlobalState;
-    return *this;
-  }
-
-  /// See IntegerState::operator|=
-  DerefState operator|=(const DerefState &R) {
-    DerefBytesState |= R.DerefBytesState;
-    GlobalState |= R.GlobalState;
-    return *this;
-  }
-};
-
 template <>
 ChangeStatus clampStateAndIndicateChange<DerefState>(DerefState &S,
                                                      const DerefState &R) {
@@ -1972,7 +1900,7 @@
   return CS0 | CS1;
 }
 
-struct AADereferenceableImpl : AADereferenceable, DerefState {
+struct AADereferenceableImpl : AADereferenceable {
   AADereferenceableImpl(const IRPosition &IRP) : AADereferenceable(IRP) {}
   using StateType = DerefState;
 
@@ -1992,26 +1920,6 @@
   const StateType &getState() const override { return *this; }
   /// }
 
-  /// See AADereferenceable::getAssumedDereferenceableBytes().
-  uint32_t getAssumedDereferenceableBytes() const override {
-    return DerefBytesState.getAssumed();
-  }
-
-  /// See AADereferenceable::getKnownDereferenceableBytes().
-  uint32_t getKnownDereferenceableBytes() const override {
-    return DerefBytesState.getKnown();
-  }
-
-  /// See AADereferenceable::isAssumedGlobal().
-  bool isAssumedGlobal() const override { return GlobalState.getAssumed(); }
-
-  /// See AADereferenceable::isKnownGlobal().
-  bool isKnownGlobal() const override { return GlobalState.getKnown(); }
-
-  bool isAssumedNonNull() const override {
-    return NonNullAA && NonNullAA->isAssumedNonNull();
-  }
-
   void getDeducedAttributes(LLVMContext &Ctx,
                             SmallVectorImpl<Attribute> &Attrs) const override {
     // TODO: Add *_globally support
@@ -2033,9 +1941,6 @@
            std::to_string(getKnownDereferenceableBytes()) + "-" +
            std::to_string(getAssumedDereferenceableBytes()) + ">";
   }
-
-private:
-  const AANonNull *NonNullAA = nullptr;
 };
 
 /// Dereferenceable attribute for a floating value.