[PATCH] D28778: Use a test fixture for LoopInfoTest.
Xin Tong via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 17 10:05:30 PST 2017
trentxintong updated this revision to Diff 84695.
trentxintong added a comment.
Address comments.
https://reviews.llvm.org/D28778
Files:
unittests/Analysis/LoopInfoTest.cpp
Index: unittests/Analysis/LoopInfoTest.cpp
===================================================================
--- unittests/Analysis/LoopInfoTest.cpp
+++ unittests/Analysis/LoopInfoTest.cpp
@@ -15,15 +15,29 @@
using namespace llvm;
+class LoopInfoTest : public testing::Test {
+protected:
+ /// Build the loop info for the function and run the Test.
+ void runWithLoopInfo(Module &M, StringRef FuncName,
+ function_ref<void(Function &F, LoopInfo &LI)> Test) {
+ auto *F = M.getFunction(FuncName);
+ ASSERT_NE(F, nullptr) << "Could not find " << FuncName;
+ // Compute the dominator tree and the loop info for the function.
+ std::unique_ptr<DominatorTree> DT(new DominatorTree(*F));
+ std::unique_ptr<LoopInfo> LI(new LoopInfo(*DT));
+ Test(*F, *LI);
+ }
+};
+
static std::unique_ptr<Module> makeLLVMModule(LLVMContext &Context,
const char *ModuleStr) {
SMDiagnostic Err;
return parseAssemblyString(ModuleStr, Err, Context);
}
// This tests that for a loop with a single latch, we get the loop id from
// its only latch, even in case the loop may not be in a simplified form.
-TEST(LoopInfoTest, LoopWithSingleLatch) {
+TEST_F(LoopInfoTest, LoopWithSingleLatch) {
const char *ModuleStr =
"target datalayout = \"e-m:o-i64:64-f80:128-n8:16:32:64-S128\"\n"
"define void @foo(i32 %n) {\n"
@@ -46,31 +60,26 @@
LLVMContext Context;
std::unique_ptr<Module> M = makeLLVMModule(Context, ModuleStr);
- // Build the dominator tree and loop info.
- DominatorTree DT;
- DT.recalculate(*M->begin());
- LoopInfo LI;
- LI.analyze(DT);
+ runWithLoopInfo(*M, "foo", [&](Function &F, LoopInfo &LI) {
+ Function::iterator FI = F.begin();
+ // First basic block is entry - skip it.
+ BasicBlock *Header = &*(++FI);
+ assert(Header->getName() == "for.cond");
+ Loop *L = LI.getLoopFor(Header);
- Function &F = *M->begin();
- Function::iterator FI = F.begin();
- FI++; // First basic block is entry - skip it.
- BasicBlock *Header = &*FI++;
- assert(Header->getName() == "for.cond");
- Loop *L = LI.getLoopFor(Header);
+ // This loop is not in simplified form.
+ EXPECT_FALSE(L->isLoopSimplifyForm());
- // This loop is not in simplified form.
- EXPECT_FALSE(L->isLoopSimplifyForm());
-
- // Analyze the loop metadata id.
- bool loopIDFoundAndSet = false;
- // Try to get and set the metadata id for the loop.
- if (MDNode *D = L->getLoopID()) {
- L->setLoopID(D);
- loopIDFoundAndSet = true;
- }
+ // Analyze the loop metadata id.
+ bool loopIDFoundAndSet = false;
+ // Try to get and set the metadata id for the loop.
+ if (MDNode *D = L->getLoopID()) {
+ L->setLoopID(D);
+ loopIDFoundAndSet = true;
+ }
- // We must have successfully found and set the loop id in the
- // only latch the loop has.
- EXPECT_TRUE(loopIDFoundAndSet);
+ // We must have successfully found and set the loop id in the
+ // only latch the loop has.
+ EXPECT_TRUE(loopIDFoundAndSet);
+ });
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D28778.84695.patch
Type: text/x-patch
Size: 3062 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170117/64d4561f/attachment.bin>
More information about the llvm-commits
mailing list