diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-06-10 13:44:06 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-06-10 13:44:06 +0000 |
commit | 7ab83427af0f77b59941ceba41d509d7d097b065 (patch) | |
tree | cc41c05b1db454e3d802f34df75e636ee922ad87 /unittests/Analysis/GlobalsModRefTest.cpp | |
parent | d288ef4c1788d3a951a7558c68312c2d320612b1 (diff) |
Notes
Diffstat (limited to 'unittests/Analysis/GlobalsModRefTest.cpp')
-rw-r--r-- | unittests/Analysis/GlobalsModRefTest.cpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/unittests/Analysis/GlobalsModRefTest.cpp b/unittests/Analysis/GlobalsModRefTest.cpp new file mode 100644 index 0000000000000..323edc2cc1759 --- /dev/null +++ b/unittests/Analysis/GlobalsModRefTest.cpp @@ -0,0 +1,55 @@ +//===--- 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)); +} |