diff options
Diffstat (limited to 'unittests/Transforms')
-rw-r--r-- | unittests/Transforms/Scalar/LoopPassManagerTest.cpp | 2 | ||||
-rw-r--r-- | unittests/Transforms/Utils/CMakeLists.txt | 1 | ||||
-rw-r--r-- | unittests/Transforms/Utils/FunctionComparator.cpp | 2 | ||||
-rw-r--r-- | unittests/Transforms/Utils/OrderedInstructions.cpp | 65 | ||||
-rw-r--r-- | unittests/Transforms/Utils/ValueMapperTest.cpp | 2 |
5 files changed, 69 insertions, 3 deletions
diff --git a/unittests/Transforms/Scalar/LoopPassManagerTest.cpp b/unittests/Transforms/Scalar/LoopPassManagerTest.cpp index 227060f0a46e..dfc351c648b1 100644 --- a/unittests/Transforms/Scalar/LoopPassManagerTest.cpp +++ b/unittests/Transforms/Scalar/LoopPassManagerTest.cpp @@ -7,6 +7,7 @@ // //===----------------------------------------------------------------------===// +#include "llvm/Transforms/Scalar/LoopPassManager.h" #include "llvm/Analysis/AliasAnalysis.h" #include "llvm/Analysis/AssumptionCache.h" #include "llvm/Analysis/ScalarEvolution.h" @@ -19,7 +20,6 @@ #include "llvm/IR/Module.h" #include "llvm/IR/PassManager.h" #include "llvm/Support/SourceMgr.h" -#include "llvm/Transforms/Scalar/LoopPassManager.h" #include "gmock/gmock.h" #include "gtest/gtest.h" diff --git a/unittests/Transforms/Utils/CMakeLists.txt b/unittests/Transforms/Utils/CMakeLists.txt index 0fc19ef09fb0..475c365dddc4 100644 --- a/unittests/Transforms/Utils/CMakeLists.txt +++ b/unittests/Transforms/Utils/CMakeLists.txt @@ -11,5 +11,6 @@ add_llvm_unittest(UtilsTests FunctionComparator.cpp IntegerDivision.cpp Local.cpp + OrderedInstructions.cpp ValueMapperTest.cpp ) diff --git a/unittests/Transforms/Utils/FunctionComparator.cpp b/unittests/Transforms/Utils/FunctionComparator.cpp index ff68cd6224d7..26e20cd9112c 100644 --- a/unittests/Transforms/Utils/FunctionComparator.cpp +++ b/unittests/Transforms/Utils/FunctionComparator.cpp @@ -10,8 +10,8 @@ #include "llvm/IR/BasicBlock.h" #include "llvm/IR/IRBuilder.h" #include "llvm/IR/Instructions.h" -#include "llvm/IR/Module.h" #include "llvm/IR/LLVMContext.h" +#include "llvm/IR/Module.h" #include "gtest/gtest.h" using namespace llvm; diff --git a/unittests/Transforms/Utils/OrderedInstructions.cpp b/unittests/Transforms/Utils/OrderedInstructions.cpp new file mode 100644 index 000000000000..1d6df1722945 --- /dev/null +++ b/unittests/Transforms/Utils/OrderedInstructions.cpp @@ -0,0 +1,65 @@ +//===- OrderedInstructions.cpp - Unit tests for OrderedInstructions ------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "llvm/Transforms/Utils/OrderedInstructions.h" +#include "llvm/IR/BasicBlock.h" +#include "llvm/IR/Dominators.h" +#include "llvm/IR/IRBuilder.h" +#include "llvm/IR/Instructions.h" +#include "llvm/IR/LLVMContext.h" +#include "llvm/IR/Module.h" +#include "gtest/gtest.h" + +using namespace llvm; + +/// Check intra-basicblock and inter-basicblock dominance using +/// OrderedInstruction. +TEST(OrderedInstructionsTest, DominanceTest) { + LLVMContext Ctx; + Module M("test", Ctx); + IRBuilder<> B(Ctx); + FunctionType *FTy = + FunctionType::get(Type::getVoidTy(Ctx), {B.getInt8PtrTy()}, false); + Function *F = cast<Function>(M.getOrInsertFunction("f", FTy)); + + // Create the function as follow and check for dominance relation. + // + // test(): + // bbx: + // loadx; + // loady; + // bby: + // loadz; + // return; + // + // More specifically, check for loadx -> (dominates) loady, + // loady -> loadx and loady -> loadz. + // + // Create BBX with 2 loads. + BasicBlock *BBX = BasicBlock::Create(Ctx, "bbx", F); + B.SetInsertPoint(BBX); + Argument *PointerArg = &*F->arg_begin(); + LoadInst *LoadInstX = B.CreateLoad(PointerArg); + LoadInst *LoadInstY = B.CreateLoad(PointerArg); + + // Create BBY with 1 load. + BasicBlock *BBY = BasicBlock::Create(Ctx, "bby", F); + B.SetInsertPoint(BBY); + LoadInst *LoadInstZ = B.CreateLoad(PointerArg); + B.CreateRet(LoadInstZ); + std::unique_ptr<DominatorTree> DT(new DominatorTree(*F)); + OrderedInstructions OI(&*DT); + + // Intra-BB dominance test. + EXPECT_TRUE(OI.dominates(LoadInstX, LoadInstY)); + EXPECT_FALSE(OI.dominates(LoadInstY, LoadInstX)); + + // Inter-BB dominance test. + EXPECT_TRUE(OI.dominates(LoadInstY, LoadInstZ)); +} diff --git a/unittests/Transforms/Utils/ValueMapperTest.cpp b/unittests/Transforms/Utils/ValueMapperTest.cpp index 34b62bb930d9..94ac76bb076c 100644 --- a/unittests/Transforms/Utils/ValueMapperTest.cpp +++ b/unittests/Transforms/Utils/ValueMapperTest.cpp @@ -7,12 +7,12 @@ // //===----------------------------------------------------------------------===// +#include "llvm/Transforms/Utils/ValueMapper.h" #include "llvm/IR/Constants.h" #include "llvm/IR/Function.h" #include "llvm/IR/GlobalVariable.h" #include "llvm/IR/LLVMContext.h" #include "llvm/IR/Metadata.h" -#include "llvm/Transforms/Utils/ValueMapper.h" #include "gtest/gtest.h" using namespace llvm; |