From 69365ae56f67affb4bfc3e467d4fbb73b03355e5 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 14 Jul 2023 10:54:38 +0200 Subject: [PATCH] [RandomIRBuilder] Remove use of getNonOpaquePointerElementType() (NFC) --- .../include/llvm/FuzzMutate/RandomIRBuilder.h | 3 +-- llvm/lib/FuzzMutate/RandomIRBuilder.cpp | 23 ++++--------------- 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/llvm/include/llvm/FuzzMutate/RandomIRBuilder.h b/llvm/include/llvm/FuzzMutate/RandomIRBuilder.h index 8560f2ca2066..1a422fcc0be6 100644 --- a/llvm/include/llvm/FuzzMutate/RandomIRBuilder.h +++ b/llvm/include/llvm/FuzzMutate/RandomIRBuilder.h @@ -96,8 +96,7 @@ struct RandomIRBuilder { Value *V); /// Create a user for \c V in \c BB. Instruction *newSink(BasicBlock &BB, ArrayRef Insts, Value *V); - Value *findPointer(BasicBlock &BB, ArrayRef Insts, - ArrayRef Srcs, fuzzerop::SourcePred Pred); + Value *findPointer(BasicBlock &BB, ArrayRef Insts); /// Return a uniformly choosen type from \c AllowedTypes Type *randomType(); Function *createFunctionDeclaration(Module &M, uint64_t ArgNum); diff --git a/llvm/lib/FuzzMutate/RandomIRBuilder.cpp b/llvm/lib/FuzzMutate/RandomIRBuilder.cpp index 548ba7956fd5..5569888e5b28 100644 --- a/llvm/lib/FuzzMutate/RandomIRBuilder.cpp +++ b/llvm/lib/FuzzMutate/RandomIRBuilder.cpp @@ -203,7 +203,7 @@ Value *RandomIRBuilder::newSource(BasicBlock &BB, ArrayRef Insts, RS.sample(Pred.generate(Srcs, KnownTypes)); // If we can find a pointer to load from, use it half the time. - Value *Ptr = findPointer(BB, Insts, Srcs, Pred); + Value *Ptr = findPointer(BB, Insts); if (Ptr) { // Create load from the chosen pointer auto IP = BB.getFirstInsertionPt(); @@ -363,7 +363,7 @@ Instruction *RandomIRBuilder::connectToSink(BasicBlock &BB, Instruction *RandomIRBuilder::newSink(BasicBlock &BB, ArrayRef Insts, Value *V) { - Value *Ptr = findPointer(BB, Insts, {V}, matchFirstType()); + Value *Ptr = findPointer(BB, Insts); if (!Ptr) { if (uniform(Rand, 0, 1)) { Type *Ty = V->getType(); @@ -377,27 +377,14 @@ Instruction *RandomIRBuilder::newSink(BasicBlock &BB, } Value *RandomIRBuilder::findPointer(BasicBlock &BB, - ArrayRef Insts, - ArrayRef Srcs, SourcePred Pred) { - auto IsMatchingPtr = [&Srcs, &Pred](Instruction *Inst) { + ArrayRef Insts) { + auto IsMatchingPtr = [](Instruction *Inst) { // Invoke instructions sometimes produce valid pointers but currently // we can't insert loads or stores from them if (Inst->isTerminator()) return false; - if (auto *PtrTy = dyn_cast(Inst->getType())) { - if (PtrTy->isOpaque()) - return true; - - // We can never generate loads from non first class or non sized types - Type *ElemTy = PtrTy->getNonOpaquePointerElementType(); - if (!ElemTy->isSized() || !ElemTy->isFirstClassType()) - return false; - - // TODO: Check if this is horribly expensive. - return Pred.matches(Srcs, UndefValue::get(ElemTy)); - } - return false; + return Inst->getType()->isPointerTy(); }; if (auto RS = makeSampler(Rand, make_filter_range(Insts, IsMatchingPtr))) return RS.getSelection(); -- 2.34.1