@@ -215,3 +215,35 @@ define void @foo(float %arg0, double %arg1, i8 %arg2, i64 %arg3, ptr %arg4) {
215215 EXPECT_EQ (sandboxir::Utils::getNumBits (L2), 8u );
216216 EXPECT_EQ (sandboxir::Utils::getNumBits (L3), 64u );
217217}
218+
219+ TEST_F (UtilsTest, GetMemBase) {
220+ parseIR (C, R"IR(
221+ define void @foo(ptr %ptrA, float %val, ptr %ptrB) {
222+ bb:
223+ %gepA0 = getelementptr float, ptr %ptrA, i32 0
224+ %gepA1 = getelementptr float, ptr %ptrA, i32 1
225+ %gepB0 = getelementptr float, ptr %ptrB, i32 0
226+ %gepB1 = getelementptr float, ptr %ptrB, i32 1
227+ store float %val, ptr %gepA0
228+ store float %val, ptr %gepA1
229+ store float %val, ptr %gepB0
230+ store float %val, ptr %gepB1
231+ ret void
232+ }
233+ )IR" );
234+ llvm::Function &Foo = *M->getFunction (" foo" );
235+ sandboxir::Context Ctx (C);
236+ sandboxir::Function *F = Ctx.createFunction (&Foo);
237+
238+ auto It = std::next (F->begin ()->begin (), 4 );
239+ auto *St0 = cast<sandboxir::StoreInst>(&*It++);
240+ auto *St1 = cast<sandboxir::StoreInst>(&*It++);
241+ auto *St2 = cast<sandboxir::StoreInst>(&*It++);
242+ auto *St3 = cast<sandboxir::StoreInst>(&*It++);
243+ EXPECT_EQ (sandboxir::Utils::getMemInstructionBase (St0),
244+ sandboxir::Utils::getMemInstructionBase (St1));
245+ EXPECT_EQ (sandboxir::Utils::getMemInstructionBase (St2),
246+ sandboxir::Utils::getMemInstructionBase (St3));
247+ EXPECT_NE (sandboxir::Utils::getMemInstructionBase (St0),
248+ sandboxir::Utils::getMemInstructionBase (St3));
249+ }
0 commit comments