summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/FuzzMutate/RandomIRBuilderTest.cpp
diff options
context:
space:
mode:
authorIgor Laevsky <igmyrj@gmail.com>2017-12-13 11:49:04 +0000
committerIgor Laevsky <igmyrj@gmail.com>2017-12-13 11:49:04 +0000
commitd209ff981473ae4733c4521e80c427c6ada8a8a3 (patch)
tree9ddcbae2c102a738fd759491eedf54a9b4ffb948 /llvm/unittests/FuzzMutate/RandomIRBuilderTest.cpp
parentf39a29265c29aa71ea9b0ca012a3c9817548b78f (diff)
downloadbcm5719-llvm-d209ff981473ae4733c4521e80c427c6ada8a8a3.tar.gz
bcm5719-llvm-d209ff981473ae4733c4521e80c427c6ada8a8a3.zip
[FuzzMutate] Only generate loads and stores to the first class sized types
Differential Revision: https://reviews.llvm.org/D41109 llvm-svn: 320573
Diffstat (limited to 'llvm/unittests/FuzzMutate/RandomIRBuilderTest.cpp')
-rw-r--r--llvm/unittests/FuzzMutate/RandomIRBuilderTest.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/llvm/unittests/FuzzMutate/RandomIRBuilderTest.cpp b/llvm/unittests/FuzzMutate/RandomIRBuilderTest.cpp
index cd0b96bf859..b60da6cbf9f 100644
--- a/llvm/unittests/FuzzMutate/RandomIRBuilderTest.cpp
+++ b/llvm/unittests/FuzzMutate/RandomIRBuilderTest.cpp
@@ -236,4 +236,34 @@ TEST(RandomIRBuilderTest, Invokes) {
}
}
+TEST(RandomIRBuilderTest, FirstClassTypes) {
+ // Check that we never insert new source as a load from non first class
+ // or unsized type.
+
+ LLVMContext Ctx;
+ const char *SourceCode = "%Opaque = type opaque\n"
+ "define void @test(i8* %ptr) {\n"
+ "entry:\n"
+ " %tmp = bitcast i8* %ptr to i32* (i32*)*\n"
+ " %tmp1 = bitcast i8* %ptr to %Opaque*\n"
+ " ret void\n"
+ "}";
+ auto M = parseAssembly(SourceCode, Ctx);
+
+ std::vector<Type *> Types = {Type::getInt8Ty(Ctx)};
+ RandomIRBuilder IB(Seed, Types);
+
+ Function &F = *M->getFunction("test");
+ BasicBlock &BB = *F.begin();
+ // Non first class type
+ Instruction *FuncPtr = &*BB.begin();
+ // Unsized type
+ Instruction *OpaquePtr = &*std::next(BB.begin());
+
+ for (int i = 0; i < 10; ++i) {
+ Value *V = IB.findOrCreateSource(BB, {FuncPtr, OpaquePtr});
+ ASSERT_FALSE(isa<LoadInst>(V));
+ }
+}
+
}
OpenPOWER on IntegriCloud