[PATCH] [IRBuilder] A method for creating a vector from scalar values
Paweł Bylica
chfast at gmail.com
Thu Apr 30 06:48:54 PDT 2015
IRBuilder::CreateVectorPack method takes an array of values of the same scalar type and packs them into a vector with series of instertelement instructions.
http://reviews.llvm.org/D9372
Files:
include/llvm/IR/IRBuilder.h
unittests/IR/IRBuilderTest.cpp
Index: include/llvm/IR/IRBuilder.h
===================================================================
--- include/llvm/IR/IRBuilder.h
+++ include/llvm/IR/IRBuilder.h
@@ -1609,6 +1609,19 @@
return CreateShuffleVector(V, Undef, Zeros, Name + ".splat");
}
+ /// \brief Create a vector from scalar values.
+ ///
+ /// Returns a vector value with elements \p Elts inserted into it.
+ /// All elements values must have the same scalar type.
+ Value *CreateVectorPack(ArrayRef<Value *> Elts, const Twine &Name = "") {
+ assert(Elts.size() > 0 && "Cannot pack an empty vector");
+ auto *VectorTy = VectorType::get(Elts.front()->getType(), Elts.size());
+ Value *Vec = UndefValue::get(VectorTy);
+ for (size_t i = 0; i < Elts.size(); ++i)
+ Vec = CreateInsertElement(Vec, Elts[i], i, Name + ".pack");
+ return Vec;
+ }
+
/// \brief Return a value that has been extracted from a larger integer type.
Value *CreateExtractInteger(const DataLayout &DL, Value *From,
IntegerType *ExtractedTy, uint64_t Offset,
Index: unittests/IR/IRBuilderTest.cpp
===================================================================
--- unittests/IR/IRBuilderTest.cpp
+++ unittests/IR/IRBuilderTest.cpp
@@ -321,5 +321,17 @@
EXPECT_EQ(Elt2, X2);
}
+TEST_F(IRBuilderTest, VectorPack) {
+ IRBuilder<> Builder(BB);
+
+ Value *Elts[] = {Builder.getInt16(-1),
+ Builder.getInt16(-2),
+ Builder.getInt16(-3)};
+ auto *Vec = Builder.CreateVectorPack(Elts, "v");
+ EXPECT_EQ(VectorType::get(Builder.getInt16Ty(), 3), Vec->getType());
+ auto *Elt2 = Builder.CreateExtractElement(Vec, 2);
+ EXPECT_EQ(Builder.getInt16(-3), Elt2);
+}
+
}
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D9372.24703.patch
Type: text/x-patch
Size: 1720 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150430/ddc1827b/attachment.bin>
More information about the llvm-commits
mailing list