//===-- 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 &Ops); void describeFuzzerFloatOps(std::vector &Ops); void describeFuzzerControlFlowOps(std::vector &Ops); void describeFuzzerPointerOps(std::vector &Ops); void describeFuzzerAggregateOps(std::vector &Ops); void describeFuzzerVectorOps(std::vector &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