summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/IR/BasicBlockTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/IR/BasicBlockTest.cpp')
-rw-r--r--llvm/unittests/IR/BasicBlockTest.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/llvm/unittests/IR/BasicBlockTest.cpp b/llvm/unittests/IR/BasicBlockTest.cpp
index 08a41ff3693..cf950501aec 100644
--- a/llvm/unittests/IR/BasicBlockTest.cpp
+++ b/llvm/unittests/IR/BasicBlockTest.cpp
@@ -77,5 +77,44 @@ TEST(BasicBlockTest, PhiRange) {
}
}
+#define CHECK_ITERATORS(Range1, Range2) \
+ EXPECT_EQ(std::distance(Range1.begin(), Range1.end()), \
+ std::distance(Range2.begin(), Range2.end())); \
+ for (auto Pair : zip(Range1, Range2)) \
+ EXPECT_EQ(&std::get<0>(Pair), std::get<1>(Pair));
+
+TEST(BasicBlockTest, TestSkipInsts) {
+ LLVMContext Ctx;
+
+ std::unique_ptr<Module> M(new Module("MyModule", Ctx));
+ Type *ArgTy1[] = {Type::getInt32PtrTy(Ctx)};
+ FunctionType *FT = FunctionType::get(Type::getVoidTy(Ctx), ArgTy1, false);
+ auto *V = new Argument(Type::getInt32Ty(Ctx));
+ Function *F = Function::Create(FT, Function::ExternalLinkage, "", M.get());
+
+ Value *DbgAddr = Intrinsic::getDeclaration(M.get(), Intrinsic::dbg_addr);
+ Value *DbgDeclare =
+ Intrinsic::getDeclaration(M.get(), Intrinsic::dbg_declare);
+ Value *DbgValue = Intrinsic::getDeclaration(M.get(), Intrinsic::dbg_value);
+ Value *DIV = MetadataAsValue::get(Ctx, (Metadata *)nullptr);
+ SmallVector<Value *, 3> Args = {DIV, DIV, DIV};
+
+ BasicBlock *BB1 = BasicBlock::Create(Ctx, "", F);
+ const BasicBlock *BBConst = BB1;
+ IRBuilder<> Builder1(BB1);
+
+ AllocaInst *Var = Builder1.CreateAlloca(Builder1.getInt8Ty());
+ Builder1.CreateCall(DbgValue, Args);
+ Instruction *AddInst = cast<Instruction>(Builder1.CreateAdd(V, V));
+ Instruction *MulInst = cast<Instruction>(Builder1.CreateMul(AddInst, V));
+ Builder1.CreateCall(DbgDeclare, Args);
+ Instruction *SubInst = cast<Instruction>(Builder1.CreateSub(MulInst, V));
+ Builder1.CreateCall(DbgAddr, Args);
+
+ SmallVector<Instruction *, 4> Exp = {Var, AddInst, MulInst, SubInst};
+ CHECK_ITERATORS(BB1->instructionsWithoutDebug(), Exp);
+ CHECK_ITERATORS(BBConst->instructionsWithoutDebug(), Exp);
+}
+
} // End anonymous namespace.
} // End llvm namespace.
OpenPOWER on IntegriCloud