|
13 | 13 | #include "llvm/IR/Module.h" |
14 | 14 | #include "llvm/SandboxIR/SandboxIR.h" |
15 | 15 | #include "llvm/Support/SourceMgr.h" |
| 16 | +#include "gmock/gmock-matchers.h" |
16 | 17 | #include "gtest/gtest.h" |
17 | 18 |
|
18 | 19 | using namespace llvm; |
@@ -792,6 +793,31 @@ define void @foo(i32 %cond0, i32 %cond1) { |
792 | 793 | EXPECT_EQ(Switch->findCaseDest(BB1), One); |
793 | 794 | } |
794 | 795 |
|
| 796 | +TEST_F(TrackerTest, ShuffleVectorInstSetters) { |
| 797 | + parseIR(C, R"IR( |
| 798 | +define void @foo(<2 x i8> %v1, <2 x i8> %v2) { |
| 799 | + %shuf = shufflevector <2 x i8> %v1, <2 x i8> %v2, <2 x i32> <i32 1, i32 2> |
| 800 | + ret void |
| 801 | +} |
| 802 | +)IR"); |
| 803 | + Function &LLVMF = *M->getFunction("foo"); |
| 804 | + sandboxir::Context Ctx(C); |
| 805 | + |
| 806 | + auto *F = Ctx.createFunction(&LLVMF); |
| 807 | + auto *BB = &*F->begin(); |
| 808 | + auto It = BB->begin(); |
| 809 | + auto *SVI = cast<sandboxir::ShuffleVectorInst>(&*It++); |
| 810 | + |
| 811 | + // Check setShuffleMask. |
| 812 | + SmallVector<int, 2> OrigMask(SVI->getShuffleMask()); |
| 813 | + Ctx.save(); |
| 814 | + SVI->setShuffleMask(ArrayRef<int>({0, 0})); |
| 815 | + EXPECT_THAT(SVI->getShuffleMask(), |
| 816 | + testing::Not(testing::ElementsAreArray(OrigMask))); |
| 817 | + Ctx.revert(); |
| 818 | + EXPECT_THAT(SVI->getShuffleMask(), testing::ElementsAreArray(OrigMask)); |
| 819 | +} |
| 820 | + |
795 | 821 | TEST_F(TrackerTest, AtomicRMWSetters) { |
796 | 822 | parseIR(C, R"IR( |
797 | 823 | define void @foo(ptr %ptr, i8 %arg) { |
|
0 commit comments