| //===--- GlobalsModRefTest.cpp - Mixed TBAA unit tests --------------------===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "llvm/Analysis/GlobalsModRef.h" |
| #include "llvm/AsmParser/Parser.h" |
| #include "llvm/Support/SourceMgr.h" |
| #include "gtest/gtest.h" |
| |
| using namespace llvm; |
| |
| TEST(GlobalsModRef, OptNone) { |
| StringRef Assembly = R"( |
| define void @f1() optnone { |
| ret void |
| } |
| define void @f2() optnone readnone { |
| ret void |
| } |
| define void @f3() optnone readonly { |
| ret void |
| } |
| )"; |
| |
| LLVMContext Context; |
| SMDiagnostic Error; |
| auto M = parseAssemblyString(Assembly, Error, Context); |
| ASSERT_TRUE(M) << "Bad assembly?"; |
| |
| const auto &funcs = M->functions(); |
| auto I = funcs.begin(); |
| ASSERT_NE(I, funcs.end()); |
| const Function &F1 = *I; |
| ASSERT_NE(++I, funcs.end()); |
| const Function &F2 = *I; |
| ASSERT_NE(++I, funcs.end()); |
| const Function &F3 = *I; |
| EXPECT_EQ(++I, funcs.end()); |
| |
| Triple Trip(M->getTargetTriple()); |
| TargetLibraryInfoImpl TLII(Trip); |
| TargetLibraryInfo TLI(TLII); |
| llvm::CallGraph CG(*M); |
| |
| auto AAR = GlobalsAAResult::analyzeModule(*M, TLI, CG); |
| |
| EXPECT_EQ(FMRB_UnknownModRefBehavior, AAR.getModRefBehavior(&F1)); |
| EXPECT_EQ(FMRB_DoesNotAccessMemory, AAR.getModRefBehavior(&F2)); |
| EXPECT_EQ(FMRB_OnlyReadsMemory, AAR.getModRefBehavior(&F3)); |
| } |