diff options
-rw-r--r-- | llvm/include/llvm/IR/Constants.h | 1 | ||||
-rw-r--r-- | llvm/include/llvm/IR/IRBuilder.h | 6 | ||||
-rw-r--r-- | llvm/lib/IR/Constants.cpp | 5 |
3 files changed, 7 insertions, 5 deletions
diff --git a/llvm/include/llvm/IR/Constants.h b/llvm/include/llvm/IR/Constants.h index 2a5d14d9464..e7c109379e4 100644 --- a/llvm/include/llvm/IR/Constants.h +++ b/llvm/include/llvm/IR/Constants.h @@ -725,6 +725,7 @@ public: 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<int32_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); diff --git a/llvm/include/llvm/IR/IRBuilder.h b/llvm/include/llvm/IR/IRBuilder.h index 1e26593c188..de01d9f23b6 100644 --- a/llvm/include/llvm/IR/IRBuilder.h +++ b/llvm/include/llvm/IR/IRBuilder.h @@ -1648,11 +1648,7 @@ public: Value *CreateShuffleVector(Value *V1, Value *V2, ArrayRef<int> IntMask, const Twine &Name = "") { - size_t MaskSize = IntMask.size(); - SmallVector<Constant*, 8> MaskVec(MaskSize); - for (size_t i = 0; i != MaskSize; ++i) - MaskVec[i] = getInt32(IntMask[i]); - Value *Mask = ConstantVector::get(MaskVec); + Value *Mask = ConstantDataVector::get(Context, IntMask); return CreateShuffleVector(V1, V2, Mask, Name); } diff --git a/llvm/lib/IR/Constants.cpp b/llvm/lib/IR/Constants.cpp index 35233ae522a..37cffe38bab 100644 --- a/llvm/lib/IR/Constants.cpp +++ b/llvm/lib/IR/Constants.cpp @@ -2500,6 +2500,11 @@ Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<uint32_t> Elts) const char *Data = reinterpret_cast<const char *>(Elts.data()); return getImpl(StringRef(const_cast<char *>(Data), Elts.size()*4), Ty); } +Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<int32_t> Elts){ + Type *Ty = VectorType::get(Type::getInt32Ty(Context), Elts.size()); + const char *Data = reinterpret_cast<const char *>(Elts.data()); + return getImpl(StringRef(const_cast<char *>(Data), Elts.size()*4), Ty); +} Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<uint64_t> Elts){ Type *Ty = VectorType::get(Type::getInt64Ty(Context), Elts.size()); const char *Data = reinterpret_cast<const char *>(Elts.data()); |