@@ -186,6 +186,14 @@ TEST_F(AliasAnalysisTest, getModRefInfo) {
186
186
AtomicRMWInst::Xchg, Addr, ConstantInt::get (IntType, 1 ), Alignment,
187
187
AtomicOrdering::Monotonic, SyncScope::System, BB);
188
188
189
+ FunctionType *FooBarTy = FunctionType::get (Type::getVoidTy (C), {}, false );
190
+ Function::Create (FooBarTy, Function::ExternalLinkage, " foo" , &M);
191
+ auto *BarF = Function::Create (FooBarTy, Function::ExternalLinkage, " bar" , &M);
192
+ BarF->setDoesNotAccessMemory ();
193
+
194
+ const Instruction *Foo = CallInst::Create (M.getFunction (" foo" ), {}, BB);
195
+ const Instruction *Bar = CallInst::Create (M.getFunction (" bar" ), {}, BB);
196
+
189
197
ReturnInst::Create (C, nullptr , BB);
190
198
191
199
auto &AA = getAAResults (*F);
@@ -203,6 +211,13 @@ TEST_F(AliasAnalysisTest, getModRefInfo) {
203
211
EXPECT_EQ (AA.getModRefInfo (CmpXChg1, std::nullopt), ModRefInfo::ModRef);
204
212
EXPECT_EQ (AA.getModRefInfo (AtomicRMW, MemoryLocation ()), ModRefInfo::ModRef);
205
213
EXPECT_EQ (AA.getModRefInfo (AtomicRMW, std::nullopt), ModRefInfo::ModRef);
214
+ EXPECT_EQ (AA.getModRefInfo (Store1, Load1), ModRefInfo::ModRef);
215
+ EXPECT_EQ (AA.getModRefInfo (Store1, Store1), ModRefInfo::ModRef);
216
+ EXPECT_EQ (AA.getModRefInfo (Store1, Add1), ModRefInfo::NoModRef);
217
+ EXPECT_EQ (AA.getModRefInfo (Store1, Foo), ModRefInfo::ModRef);
218
+ EXPECT_EQ (AA.getModRefInfo (Store1, Bar), ModRefInfo::NoModRef);
219
+ EXPECT_EQ (AA.getModRefInfo (Foo, Bar), ModRefInfo::NoModRef);
220
+ EXPECT_EQ (AA.getModRefInfo (Foo, Foo), ModRefInfo::ModRef);
206
221
}
207
222
208
223
static Instruction *getInstructionByName (Function &F, StringRef Name) {
@@ -364,47 +379,6 @@ TEST_F(AliasAnalysisTest, PartialAliasOffsetSign) {
364
379
EXPECT_EQ (AR, AliasResult::PartialAlias);
365
380
EXPECT_EQ (-1 , AR.getOffset ());
366
381
}
367
-
368
- TEST_F (AliasAnalysisTest, IsNoAliasForInstructions) {
369
- // Create global variable
370
- auto *GlobalVar = new GlobalVariable (
371
- M, Type::getInt32Ty (C), false , GlobalValue::ExternalLinkage,
372
- ConstantInt::get (Type::getInt32Ty (C), 0 ), " g" );
373
- GlobalVar->setAlignment (Align (4 ));
374
-
375
- // Create function declarations
376
- FunctionType *VoidFnTy = FunctionType::get (Type::getVoidTy (C), false );
377
- Function::Create (VoidFnTy, Function::ExternalLinkage, " foo" , M);
378
- Function::Create (VoidFnTy, Function::ExternalLinkage, " bar" , M);
379
-
380
- // Create test function
381
- FunctionType *TestFnTy = FunctionType::get (Type::getInt32Ty (C), false );
382
- Function *TestFn =
383
- Function::Create (TestFnTy, Function::ExternalLinkage, " test" , M);
384
-
385
- // Create basic block
386
- BasicBlock *BB = BasicBlock::Create (C, " entry" , TestFn);
387
-
388
- // Create instructions
389
- auto *Alloca = new AllocaInst (Type::getInt32Ty (C), 0 , " p" , BB);
390
- auto *Store1 =
391
- new StoreInst (ConstantInt::get (Type::getInt32Ty (C), 42 ), Alloca, BB);
392
- auto *Store2 =
393
- new StoreInst (ConstantInt::get (Type::getInt32Ty (C), 100 ), GlobalVar, BB);
394
- auto *Call1 = CallInst::Create (M.getFunction (" foo" ), {}, BB);
395
- auto *Call2 = CallInst::Create (M.getFunction (" bar" ), {}, BB);
396
- auto *Load = new LoadInst (Type::getInt32Ty (C), Alloca, " val" , BB);
397
- ReturnInst::Create (C, Load, BB);
398
-
399
- auto &AA = getAAResults (*TestFn);
400
- EXPECT_EQ (true , AA.isNoAlias (Store1, Store2));
401
- EXPECT_EQ (false , AA.isNoAlias (Store1, Call1));
402
- EXPECT_EQ (false , AA.isNoAlias (Store1, Load));
403
- EXPECT_EQ (false , AA.isNoAlias (Store2, Call1));
404
- EXPECT_EQ (false , AA.isNoAlias (Call1, Call2));
405
- EXPECT_EQ (true , AA.isNoAlias (Store2, Load));
406
- }
407
-
408
382
class AAPassInfraTest : public testing ::Test {
409
383
protected:
410
384
LLVMContext C;
0 commit comments