diff options
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Transforms/Vectorize/VPlanValue.h')
| -rw-r--r-- | contrib/llvm-project/llvm/lib/Transforms/Vectorize/VPlanValue.h | 30 | 
1 files changed, 19 insertions, 11 deletions
diff --git a/contrib/llvm-project/llvm/lib/Transforms/Vectorize/VPlanValue.h b/contrib/llvm-project/llvm/lib/Transforms/Vectorize/VPlanValue.h index ac110bb3b0ef..116acad8e8f3 100644 --- a/contrib/llvm-project/llvm/lib/Transforms/Vectorize/VPlanValue.h +++ b/contrib/llvm-project/llvm/lib/Transforms/Vectorize/VPlanValue.h @@ -121,18 +121,11 @@ public:    /// Remove a single \p User from the list of users.    void removeUser(VPUser &User) { -    bool Found = false;      // The same user can be added multiple times, e.g. because the same VPValue      // is used twice by the same VPUser. Remove a single one. -    erase_if(Users, [&User, &Found](VPUser *Other) { -      if (Found) -        return false; -      if (Other == &User) { -        Found = true; -        return true; -      } -      return false; -    }); +    auto *I = find(Users, &User); +    if (I != Users.end()) +      Users.erase(I);    }    typedef SmallVectorImpl<VPUser *>::iterator user_iterator; @@ -163,6 +156,13 @@ public:    void replaceAllUsesWith(VPValue *New); +  /// Go through the uses list for this VPValue and make each use point to \p +  /// New if the callback ShouldReplace returns true for the given use specified +  /// by a pair of (VPUser, the use index). +  void replaceUsesWithIf( +      VPValue *New, +      llvm::function_ref<bool(VPUser &U, unsigned Idx)> ShouldReplace); +    /// Returns the recipe defining this VPValue or nullptr if it is not defined    /// by a recipe, i.e. is a live-in.    VPRecipeBase *getDefiningRecipe(); @@ -296,6 +296,14 @@ public:             "Op must be an operand of the recipe");      return false;    } + +  /// Returns true if the VPUser only uses the first part of operand \p Op. +  /// Conservatively returns false. +  virtual bool onlyFirstPartUsed(const VPValue *Op) const { +    assert(is_contained(operands(), Op) && +           "Op must be an operand of the recipe"); +    return false; +  }  };  /// This class augments a recipe with a set of VPValues defined by the recipe. @@ -325,7 +333,7 @@ class VPDef {      assert(V->Def == this && "can only remove VPValue linked with this VPDef");      assert(is_contained(DefinedValues, V) &&             "VPValue to remove must be in DefinedValues"); -    erase_value(DefinedValues, V); +    llvm::erase(DefinedValues, V);      V->Def = nullptr;    }  | 
