mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 02:33:06 +01:00
Add bitcode test to verify functions can be materialized out of order.
Summary: Adds test to check that when getLazyBitcodeModule is called: 1) Functions are not materailzed by default. 2) Only the requested function gets materialized (if no block addresses are used). Reviewers: jvoung, rafael Reviewed By: rafael Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D8907 llvm-svn: 236611
This commit is contained in:
parent
2923e93e53
commit
95019e0709
@ -82,6 +82,70 @@ TEST(BitReaderTest, DematerializeFunctionPreservesLinkageType) {
|
||||
EXPECT_FALSE(verifyModule(*M, &dbgs()));
|
||||
}
|
||||
|
||||
// Tests that lazy evaluation can parse functions out of order.
|
||||
TEST(BitReaderTest, MaterializeFunctionsOutOfOrder) {
|
||||
SmallString<1024> Mem;
|
||||
LLVMContext Context;
|
||||
std::unique_ptr<Module> M = getLazyModuleFromAssembly(
|
||||
Context, Mem, "define void @f() {\n"
|
||||
" unreachable\n"
|
||||
"}\n"
|
||||
"define void @g() {\n"
|
||||
" unreachable\n"
|
||||
"}\n"
|
||||
"define void @h() {\n"
|
||||
" unreachable\n"
|
||||
"}\n"
|
||||
"define void @j() {\n"
|
||||
" unreachable\n"
|
||||
"}\n");
|
||||
EXPECT_FALSE(verifyModule(*M, &dbgs()));
|
||||
|
||||
Function *F = M->getFunction("f");
|
||||
Function *G = M->getFunction("g");
|
||||
Function *H = M->getFunction("h");
|
||||
Function *J = M->getFunction("j");
|
||||
|
||||
// Initially all functions are not materialized (no basic blocks).
|
||||
EXPECT_TRUE(F->empty());
|
||||
EXPECT_TRUE(G->empty());
|
||||
EXPECT_TRUE(H->empty());
|
||||
EXPECT_TRUE(J->empty());
|
||||
EXPECT_FALSE(verifyModule(*M, &dbgs()));
|
||||
|
||||
// Materialize h.
|
||||
H->materialize();
|
||||
EXPECT_TRUE(F->empty());
|
||||
EXPECT_TRUE(G->empty());
|
||||
EXPECT_FALSE(H->empty());
|
||||
EXPECT_TRUE(J->empty());
|
||||
EXPECT_FALSE(verifyModule(*M, &dbgs()));
|
||||
|
||||
// Materialize g.
|
||||
G->materialize();
|
||||
EXPECT_TRUE(F->empty());
|
||||
EXPECT_FALSE(G->empty());
|
||||
EXPECT_FALSE(H->empty());
|
||||
EXPECT_TRUE(J->empty());
|
||||
EXPECT_FALSE(verifyModule(*M, &dbgs()));
|
||||
|
||||
// Materialize j.
|
||||
J->materialize();
|
||||
EXPECT_TRUE(F->empty());
|
||||
EXPECT_FALSE(G->empty());
|
||||
EXPECT_FALSE(H->empty());
|
||||
EXPECT_FALSE(J->empty());
|
||||
EXPECT_FALSE(verifyModule(*M, &dbgs()));
|
||||
|
||||
// Materialize f.
|
||||
F->materialize();
|
||||
EXPECT_FALSE(F->empty());
|
||||
EXPECT_FALSE(G->empty());
|
||||
EXPECT_FALSE(H->empty());
|
||||
EXPECT_FALSE(J->empty());
|
||||
EXPECT_FALSE(verifyModule(*M, &dbgs()));
|
||||
}
|
||||
|
||||
TEST(BitReaderTest, MaterializeFunctionsForBlockAddr) { // PR11677
|
||||
SmallString<1024> Mem;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user