You've already forked linux-packaging-mono
Imported Upstream version 5.18.0.247
Former-commit-id: 2d6af2e4ed0eda5cbdc2946446ef7718456ad190
This commit is contained in:
parent
279aa8f685
commit
ce8e504569
@ -1,65 +0,0 @@
|
||||
//===- 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));
|
||||
}
|
Reference in New Issue
Block a user