[llvm] c858deb - Remove asserting getters from base Type

Eric Christopher via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 10 22:05:06 PDT 2020


Some ancient(ish) archaeology here.

This actually breaks the use of Type.h without DerivedType.h for two
functions: getScalarType and isVectorTy.

You can have them used without defining them though they're marked inline.
Options are: Reinstating them, moving everything that uses them also out of
line, or something else I'm not thinking of right now.

Thoughts?

-eric

ps Found this with warnings in the new flang front end fwiw.

On Fri, Apr 17, 2020 at 2:04 PM Christopher Tetreault via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

>
> Author: Christopher Tetreault
> Date: 2020-04-17T14:03:31-07:00
> New Revision: c858debebc1308e748de882c745e179b1a398fa0
>
> URL:
> https://github.com/llvm/llvm-project/commit/c858debebc1308e748de882c745e179b1a398fa0
> DIFF:
> https://github.com/llvm/llvm-project/commit/c858debebc1308e748de882c745e179b1a398fa0.diff
>
> LOG: Remove asserting getters from base Type
>
> Summary:
> Remove asserting vector getters from Type in preparation for the
> VectorType refactor. The existence of these functions complicates the
> refactor while adding little value.
>
> Reviewers: dexonsmith, sdesmalen, efriedma
>
> Reviewed By: efriedma
>
> Subscribers: cfe-commits, hiraditya, llvm-commits
>
> Tags: #llvm, #clang
>
> Differential Revision: https://reviews.llvm.org/D77278
>
> Added:
>
>
> Modified:
>     clang/lib/CodeGen/CGBuiltin.cpp
>     llvm/include/llvm/IR/DerivedTypes.h
>     llvm/include/llvm/IR/Type.h
>     llvm/lib/CodeGen/CodeGenPrepare.cpp
>     llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
>     llvm/unittests/IR/VPIntrinsicTest.cpp
>
> Removed:
>
>
>
>
> ################################################################################
> diff  --git a/clang/lib/CodeGen/CGBuiltin.cpp
> b/clang/lib/CodeGen/CGBuiltin.cpp
> index f4832ef4afb2..8ee69740f15c 100644
> --- a/clang/lib/CodeGen/CGBuiltin.cpp
> +++ b/clang/lib/CodeGen/CGBuiltin.cpp
> @@ -7573,8 +7573,7 @@ Value *CodeGenFunction::EmitSVEMaskedStore(const
> CallExpr *E,
>    // The vector type that is stored may be
> diff erent from the
>    // eventual type stored to memory.
>    auto VectorTy = cast<llvm::VectorType>(Ops.back()->getType());
> -  auto MemoryTy =
> -      llvm::VectorType::get(MemEltTy, VectorTy->getVectorElementCount());
> +  auto MemoryTy = llvm::VectorType::get(MemEltTy,
> VectorTy->getElementCount());
>
>    Value *Predicate = EmitSVEPredicateCast(Ops[0], MemoryTy);
>    Value *BasePtr = Builder.CreateBitCast(Ops[1],
> MemoryTy->getPointerTo());
>
> diff  --git a/llvm/include/llvm/IR/DerivedTypes.h
> b/llvm/include/llvm/IR/DerivedTypes.h
> index 92017448fe0d..186430754303 100644
> --- a/llvm/include/llvm/IR/DerivedTypes.h
> +++ b/llvm/include/llvm/IR/DerivedTypes.h
> @@ -531,18 +531,6 @@ class VectorType : public Type {
>    }
>  };
>
> -unsigned Type::getVectorNumElements() const {
> -  return cast<VectorType>(this)->getNumElements();
> -}
> -
> -bool Type::getVectorIsScalable() const {
> -  return cast<VectorType>(this)->isScalable();
> -}
> -
> -ElementCount Type::getVectorElementCount() const {
> -  return cast<VectorType>(this)->getElementCount();
> -}
> -
>  bool Type::isVectorTy() const { return isa<VectorType>(this); }
>
>  /// Class to represent pointers.
> @@ -597,8 +585,8 @@ Type *Type::getWithNewBitWidth(unsigned NewBitWidth)
> const {
>        isIntOrIntVectorTy() &&
>        "Original type expected to be a vector of integers or a scalar
> integer.");
>    Type *NewType = getIntNTy(getContext(), NewBitWidth);
> -  if (isVectorTy())
> -    NewType = VectorType::get(NewType, getVectorElementCount());
> +  if (auto *VTy = dyn_cast<VectorType>(this))
> +    NewType = VectorType::get(NewType, VTy->getElementCount());
>    return NewType;
>  }
>
> @@ -606,6 +594,12 @@ unsigned Type::getPointerAddressSpace() const {
>    return cast<PointerType>(getScalarType())->getAddressSpace();
>  }
>
> +Type *Type::getScalarType() const {
> +  if (isVectorTy())
> +    return cast<VectorType>(this)->getElementType();
> +  return const_cast<Type *>(this);
> +}
> +
>  } // end namespace llvm
>
>  #endif // LLVM_IR_DERIVEDTYPES_H
>
> diff  --git a/llvm/include/llvm/IR/Type.h b/llvm/include/llvm/IR/Type.h
> index 79d6964e3b3e..67be3ef480b7 100644
> --- a/llvm/include/llvm/IR/Type.h
> +++ b/llvm/include/llvm/IR/Type.h
> @@ -300,11 +300,7 @@ class Type {
>
>    /// If this is a vector type, return the element type, otherwise return
>    /// 'this'.
> -  Type *getScalarType() const {
> -    if (isVectorTy())
> -      return getVectorElementType();
> -    return const_cast<Type*>(this);
> -  }
> +  inline Type *getScalarType() const;
>
>
>  //===--------------------------------------------------------------------===//
>    // Type Iteration support.
> @@ -339,8 +335,8 @@ class Type {
>
>
>  //===--------------------------------------------------------------------===//
>    // Helper methods corresponding to subclass methods.  This forces a
> cast to
> -  // the specified subclass and calls its accessor.
> "getVectorNumElements" (for
> -  // example) is shorthand for cast<VectorType>(Ty)->getNumElements().
> This is
> +  // the specified subclass and calls its accessor.
> "getArrayNumElements" (for
> +  // example) is shorthand for cast<ArrayType>(Ty)->getNumElements().
> This is
>    // only intended to cover the core methods that are frequently used,
> helper
>    // methods should not be added here.
>
> @@ -361,14 +357,6 @@ class Type {
>      return ContainedTys[0];
>    }
>
> -  inline bool getVectorIsScalable() const;
> -  inline unsigned getVectorNumElements() const;
> -  inline ElementCount getVectorElementCount() const;
> -  Type *getVectorElementType() const {
> -    assert(getTypeID() == VectorTyID);
> -    return ContainedTys[0];
> -  }
> -
>    Type *getPointerElementType() const {
>      assert(getTypeID() == PointerTyID);
>      return ContainedTys[0];
>
> diff  --git a/llvm/lib/CodeGen/CodeGenPrepare.cpp
> b/llvm/lib/CodeGen/CodeGenPrepare.cpp
> index 5eb772d12abf..d6a216f9f12c 100644
> --- a/llvm/lib/CodeGen/CodeGenPrepare.cpp
> +++ b/llvm/lib/CodeGen/CodeGenPrepare.cpp
> @@ -5262,7 +5262,7 @@ bool
> CodeGenPrepare::optimizeGatherScatterInst(Instruction *MemoryInst,
>    if (!RewriteGEP && Ops.size() == 2)
>      return false;
>
> -  unsigned NumElts = Ptr->getType()->getVectorNumElements();
> +  unsigned NumElts = cast<VectorType>(Ptr->getType())->getNumElements();
>
>    IRBuilder<> Builder(MemoryInst);
>
>
> diff  --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
> b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
> index f8c7f784bf11..a05b375d5279 100644
> --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
> +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
> @@ -4263,7 +4263,7 @@ static bool getUniformBase(const Value *Ptr, SDValue
> &Base, SDValue &Index,
>
>      Base = SDB->getValue(C);
>
> -    unsigned NumElts = Ptr->getType()->getVectorNumElements();
> +    unsigned NumElts = cast<VectorType>(Ptr->getType())->getNumElements();
>      EVT VT = EVT::getVectorVT(*DAG.getContext(), TLI.getPointerTy(DL),
> NumElts);
>      Index = DAG.getConstant(0, SDB->getCurSDLoc(), VT);
>      IndexType = ISD::SIGNED_SCALED;
>
> diff  --git a/llvm/unittests/IR/VPIntrinsicTest.cpp
> b/llvm/unittests/IR/VPIntrinsicTest.cpp
> index 919bac4ef266..35a1f3e9b4d7 100644
> --- a/llvm/unittests/IR/VPIntrinsicTest.cpp
> +++ b/llvm/unittests/IR/VPIntrinsicTest.cpp
> @@ -107,7 +107,7 @@ TEST_F(VPIntrinsicTest, GetParamPos) {
>      if (MaskParamPos.hasValue()) {
>        Type *MaskParamType = F.getArg(MaskParamPos.getValue())->getType();
>        ASSERT_TRUE(MaskParamType->isVectorTy());
> -      ASSERT_TRUE(MaskParamType->getVectorElementType()->isIntegerTy(1));
> +
> ASSERT_TRUE(cast<VectorType>(MaskParamType)->getElementType()->isIntegerTy(1));
>      }
>
>      Optional<int> VecLenParamPos =
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200610/19e518ea/attachment.html>


More information about the llvm-commits mailing list