[llvm] r327894 - Make ConstantDataArray::get constructor templated. Will support signed integers.
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 19 13:07:24 PDT 2018
This failing build for me
include/llvm/IR/Type.h:413:14: error: cannot initialize return object of
type 'llvm::Type *' with an rvalue of type 'llvm::IntegerType *'
return Type::getIntNTy(C, noOfBits);
~Craig
On Mon, Mar 19, 2018 at 12:49 PM, Alina Sbirlea via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> Author: asbirlea
> Date: Mon Mar 19 12:49:28 2018
> New Revision: 327894
>
> URL: http://llvm.org/viewvc/llvm-project?rev=327894&view=rev
> Log:
> Make ConstantDataArray::get constructor templated. Will support signed
> integers.
>
> Summary: Make ConstantDataArray::get() constructors a single templated one.
>
> Reviewers: timshen, rsmith
>
> Subscribers: sanjoy, llvm-commits, jlebar
>
> Differential Revision: https://reviews.llvm.org/D44337
>
> Modified:
> llvm/trunk/include/llvm/IR/Constants.h
> llvm/trunk/include/llvm/IR/Type.h
> llvm/trunk/lib/IR/Constants.cpp
>
> Modified: llvm/trunk/include/llvm/IR/Constants.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/
> llvm/IR/Constants.h?rev=327894&r1=327893&r2=327894&view=diff
> ============================================================
> ==================
> --- llvm/trunk/include/llvm/IR/Constants.h (original)
> +++ llvm/trunk/include/llvm/IR/Constants.h Mon Mar 19 12:49:28 2018
> @@ -692,15 +692,23 @@ class ConstantDataArray final : public C
> public:
> ConstantDataArray(const ConstantDataArray &) = delete;
>
> - /// get() constructors - Return a constant with array type with an
> element
> + /// get() constructor - Return a constant with array type with an
> element
> /// count and element type matching the ArrayRef passed in. Note that
> this
> /// can return a ConstantAggregateZero object.
> - static Constant *get(LLVMContext &Context, ArrayRef<uint8_t> Elts);
> - static Constant *get(LLVMContext &Context, ArrayRef<uint16_t> Elts);
> - static Constant *get(LLVMContext &Context, ArrayRef<uint32_t> Elts);
> - static Constant *get(LLVMContext &Context, ArrayRef<uint64_t> Elts);
> - static Constant *get(LLVMContext &Context, ArrayRef<float> Elts);
> - static Constant *get(LLVMContext &Context, ArrayRef<double> Elts);
> + template <typename ElementTy>
> + static Constant *get(LLVMContext &Context, ArrayRef<ElementTy> Elts) {
> + const char *Data = reinterpret_cast<const char *>(Elts.data());
> + Type *Ty =
> + ArrayType::get(Type::getScalarTy<ElementTy>(Context),
> Elts.size());
> + return getImpl(StringRef(Data, Elts.size() * sizeof(ElementTy)), Ty);
> + }
> +
> + /// get() constructor - ArrayTy needs to be compatible with
> + /// ArrayRef<ElementTy>. Calls get(LLVMContext, ArrayRef<ElementTy>).
> + template <typename ArrayTy>
> + static Constant *get(LLVMContext &Context, ArrayTy &Elts) {
> + return ConstantDataArray::get(Context, makeArrayRef(Elts));
> + }
>
> /// getFP() constructors - Return a constant with array type with an
> element
> /// count and element type of float with precision matching the number
> of
>
> Modified: llvm/trunk/include/llvm/IR/Type.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/
> llvm/IR/Type.h?rev=327894&r1=327893&r2=327894&view=diff
> ============================================================
> ==================
> --- llvm/trunk/include/llvm/IR/Type.h (original)
> +++ llvm/trunk/include/llvm/IR/Type.h Mon Mar 19 12:49:28 2018
> @@ -407,6 +407,20 @@ public:
> static IntegerType *getInt32Ty(LLVMContext &C);
> static IntegerType *getInt64Ty(LLVMContext &C);
> static IntegerType *getInt128Ty(LLVMContext &C);
> + template <typename ScalarTy> static Type *getScalarTy(LLVMContext &C) {
> + int noOfBits = sizeof(ScalarTy) * CHAR_BIT;
> + if (std::is_integral<ScalarTy>::value) {
> + return Type::getIntNTy(C, noOfBits);
> + } else if (std::is_floating_point<ScalarTy>::value) {
> + switch (noOfBits) {
> + case 32:
> + return Type::getFloatTy(C);
> + case 64:
> + return Type::getDoubleTy(C);
> + }
> + }
> + llvm_unreachable("Unsupported type in Type::getScalarTy");
> + }
>
> //===-------------------------------------------------------
> -------------===//
> // Convenience methods for getting pointer types with one of the above
> builtin
>
> Modified: llvm/trunk/lib/IR/Constants.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/
> Constants.cpp?rev=327894&r1=327893&r2=327894&view=diff
> ============================================================
> ==================
> --- llvm/trunk/lib/IR/Constants.cpp (original)
> +++ llvm/trunk/lib/IR/Constants.cpp Mon Mar 19 12:49:28 2018
> @@ -2452,40 +2452,6 @@ void ConstantDataSequential::destroyCons
> Next = nullptr;
> }
>
> -/// get() constructors - Return a constant with array type with an element
> -/// count and element type matching the ArrayRef passed in. Note that
> this
> -/// can return a ConstantAggregateZero object.
> -Constant *ConstantDataArray::get(LLVMContext &Context, ArrayRef<uint8_t>
> Elts) {
> - Type *Ty = ArrayType::get(Type::getInt8Ty(Context), Elts.size());
> - const char *Data = reinterpret_cast<const char *>(Elts.data());
> - return getImpl(StringRef(Data, Elts.size() * 1), Ty);
> -}
> -Constant *ConstantDataArray::get(LLVMContext &Context,
> ArrayRef<uint16_t> Elts){
> - Type *Ty = ArrayType::get(Type::getInt16Ty(Context), Elts.size());
> - const char *Data = reinterpret_cast<const char *>(Elts.data());
> - return getImpl(StringRef(Data, Elts.size() * 2), Ty);
> -}
> -Constant *ConstantDataArray::get(LLVMContext &Context,
> ArrayRef<uint32_t> Elts){
> - Type *Ty = ArrayType::get(Type::getInt32Ty(Context), Elts.size());
> - const char *Data = reinterpret_cast<const char *>(Elts.data());
> - return getImpl(StringRef(Data, Elts.size() * 4), Ty);
> -}
> -Constant *ConstantDataArray::get(LLVMContext &Context,
> ArrayRef<uint64_t> Elts){
> - Type *Ty = ArrayType::get(Type::getInt64Ty(Context), Elts.size());
> - const char *Data = reinterpret_cast<const char *>(Elts.data());
> - return getImpl(StringRef(Data, Elts.size() * 8), Ty);
> -}
> -Constant *ConstantDataArray::get(LLVMContext &Context, ArrayRef<float>
> Elts) {
> - Type *Ty = ArrayType::get(Type::getFloatTy(Context), Elts.size());
> - const char *Data = reinterpret_cast<const char *>(Elts.data());
> - return getImpl(StringRef(Data, Elts.size() * 4), Ty);
> -}
> -Constant *ConstantDataArray::get(LLVMContext &Context, ArrayRef<double>
> Elts) {
> - Type *Ty = ArrayType::get(Type::getDoubleTy(Context), Elts.size());
> - const char *Data = reinterpret_cast<const char *>(Elts.data());
> - return getImpl(StringRef(Data, Elts.size() * 8), Ty);
> -}
> -
> /// getFP() constructors - Return a constant with array type with an
> element
> /// count and element type of float with precision matching the number of
> /// bits in the ArrayRef passed in. (i.e. half for 16bits, float for
> 32bits,
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://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/20180319/0775dbbc/attachment.html>
More information about the llvm-commits
mailing list