mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
c5917e5476
Same as r311392 with some fixes for library dependencies. Thanks to Chapuni for helping work those out! Original commit message: This introduces the FuzzMutate library, which provides structured fuzzing for LLVM IR, as described in my EuroLLVM 2017 talk. Most of the basic mutators to inject and delete IR are provided, with support for most basic operations. llvm-svn: 311402
55 lines
1.9 KiB
C++
55 lines
1.9 KiB
C++
//===-- Operations.h - ----------------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Implementations of common fuzzer operation descriptors for building an IR
|
|
// mutator.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_FUZZMUTATE_OPERATIONS_H
|
|
#define LLVM_FUZZMUTATE_OPERATIONS_H
|
|
|
|
#include "llvm/FuzzMutate/OpDescriptor.h"
|
|
#include "llvm/IR/InstrTypes.h"
|
|
#include "llvm/IR/Instruction.h"
|
|
|
|
namespace llvm {
|
|
|
|
/// Getters for the default sets of operations, per general category.
|
|
/// @{
|
|
void describeFuzzerIntOps(std::vector<fuzzerop::OpDescriptor> &Ops);
|
|
void describeFuzzerFloatOps(std::vector<fuzzerop::OpDescriptor> &Ops);
|
|
void describeFuzzerControlFlowOps(std::vector<fuzzerop::OpDescriptor> &Ops);
|
|
void describeFuzzerPointerOps(std::vector<fuzzerop::OpDescriptor> &Ops);
|
|
void describeFuzzerAggregateOps(std::vector<fuzzerop::OpDescriptor> &Ops);
|
|
void describeFuzzerVectorOps(std::vector<fuzzerop::OpDescriptor> &Ops);
|
|
/// @}
|
|
|
|
namespace fuzzerop {
|
|
|
|
/// Descriptors for individual operations.
|
|
/// @{
|
|
OpDescriptor binOpDescriptor(unsigned Weight, Instruction::BinaryOps Op);
|
|
OpDescriptor cmpOpDescriptor(unsigned Weight, Instruction::OtherOps CmpOp,
|
|
CmpInst::Predicate Pred);
|
|
OpDescriptor splitBlockDescriptor(unsigned Weight);
|
|
OpDescriptor gepDescriptor(unsigned Weight);
|
|
OpDescriptor extractValueDescriptor(unsigned Weight);
|
|
OpDescriptor insertValueDescriptor(unsigned Weight);
|
|
OpDescriptor extractElementDescriptor(unsigned Weight);
|
|
OpDescriptor insertElementDescriptor(unsigned Weight);
|
|
OpDescriptor shuffleVectorDescriptor(unsigned Weight);
|
|
/// @}
|
|
|
|
} // end fuzzerop namespace
|
|
|
|
} // end llvm namespace
|
|
|
|
#endif // LLVM_FUZZMUTATE_OPERATIONS_H
|