diff options
| author | Pawel Bylica <chfast@gmail.com> | 2015-04-30 09:01:22 +0000 |
|---|---|---|
| committer | Pawel Bylica <chfast@gmail.com> | 2015-04-30 09:01:22 +0000 |
| commit | 0c2ab37be653152ad658c57f340d2d668e758f16 (patch) | |
| tree | df98667341f9431b07bde1a2c5e8dd0a509e9801 | |
| parent | 232778a7a06a57709591eb28c6475026197b0d09 (diff) | |
| download | bcm5719-llvm-0c2ab37be653152ad658c57f340d2d668e758f16.tar.gz bcm5719-llvm-0c2ab37be653152ad658c57f340d2d668e758f16.zip | |
Add convenient overloads for CreateInsertElement and CreateExtractElement methods in IRBuilder
Summary:
This pathc add convenient overloads for CreateInsertElement and CreateExtractElement methods in IRBuilder
where vector index can be uint64_t instead of Value*.
Test Plan: Unit test included.
Reviewers: majnemer
Reviewed By: majnemer
Subscribers: majnemer, llvm-commits
Differential Revision: http://reviews.llvm.org/D9347
llvm-svn: 236214
| -rw-r--r-- | llvm/include/llvm/IR/IRBuilder.h | 10 | ||||
| -rw-r--r-- | llvm/unittests/IR/IRBuilderTest.cpp | 15 |
2 files changed, 25 insertions, 0 deletions
diff --git a/llvm/include/llvm/IR/IRBuilder.h b/llvm/include/llvm/IR/IRBuilder.h index d6550e3dbf0..515f19c754e 100644 --- a/llvm/include/llvm/IR/IRBuilder.h +++ b/llvm/include/llvm/IR/IRBuilder.h @@ -1499,6 +1499,11 @@ public: return Insert(ExtractElementInst::Create(Vec, Idx), Name); } + Value *CreateExtractElement(Value *Vec, uint64_t Idx, + const Twine &Name = "") { + return CreateExtractElement(Vec, getInt64(Idx), Name); + } + Value *CreateInsertElement(Value *Vec, Value *NewElt, Value *Idx, const Twine &Name = "") { if (Constant *VC = dyn_cast<Constant>(Vec)) @@ -1508,6 +1513,11 @@ public: return Insert(InsertElementInst::Create(Vec, NewElt, Idx), Name); } + Value *CreateInsertElement(Value *Vec, Value *NewElt, uint64_t Idx, + const Twine &Name = "") { + return CreateInsertElement(Vec, NewElt, getInt64(Idx), Name); + } + Value *CreateShuffleVector(Value *V1, Value *V2, Value *Mask, const Twine &Name = "") { if (Constant *V1C = dyn_cast<Constant>(V1)) diff --git a/llvm/unittests/IR/IRBuilderTest.cpp b/llvm/unittests/IR/IRBuilderTest.cpp index 9fe241c1a74..e8aaaea0775 100644 --- a/llvm/unittests/IR/IRBuilderTest.cpp +++ b/llvm/unittests/IR/IRBuilderTest.cpp @@ -306,5 +306,20 @@ TEST_F(IRBuilderTest, DIBuilder) { EXPECT_TRUE(verifyModule(*M)); } +TEST_F(IRBuilderTest, InsertExtractElement) { + IRBuilder<> Builder(BB); + + auto VecTy = VectorType::get(Builder.getInt64Ty(), 4); + auto Elt1 = Builder.getInt64(-1); + auto Elt2 = Builder.getInt64(-2); + Value *Vec = UndefValue::get(VecTy); + Vec = Builder.CreateInsertElement(Vec, Elt1, Builder.getInt8(1)); + Vec = Builder.CreateInsertElement(Vec, Elt2, 2); + auto X1 = Builder.CreateExtractElement(Vec, 1); + auto X2 = Builder.CreateExtractElement(Vec, Builder.getInt32(2)); + EXPECT_EQ(Elt1, X1); + EXPECT_EQ(Elt2, X2); +} + } |

