109467b48Spatrick //===-- Operations.h - ----------------------------------------*- C++ -*-===// 209467b48Spatrick // 309467b48Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 409467b48Spatrick // See https://llvm.org/LICENSE.txt for license information. 509467b48Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 609467b48Spatrick // 709467b48Spatrick //===----------------------------------------------------------------------===// 809467b48Spatrick // 909467b48Spatrick // Implementations of common fuzzer operation descriptors for building an IR 1009467b48Spatrick // mutator. 1109467b48Spatrick // 1209467b48Spatrick //===----------------------------------------------------------------------===// 1309467b48Spatrick 1409467b48Spatrick #ifndef LLVM_FUZZMUTATE_OPERATIONS_H 1509467b48Spatrick #define LLVM_FUZZMUTATE_OPERATIONS_H 1609467b48Spatrick 1709467b48Spatrick #include "llvm/FuzzMutate/OpDescriptor.h" 1809467b48Spatrick #include "llvm/IR/InstrTypes.h" 1909467b48Spatrick #include "llvm/IR/Instruction.h" 2009467b48Spatrick 2109467b48Spatrick namespace llvm { 2209467b48Spatrick 2309467b48Spatrick /// Getters for the default sets of operations, per general category. 2409467b48Spatrick /// @{ 2509467b48Spatrick void describeFuzzerIntOps(std::vector<fuzzerop::OpDescriptor> &Ops); 2609467b48Spatrick void describeFuzzerFloatOps(std::vector<fuzzerop::OpDescriptor> &Ops); 2709467b48Spatrick void describeFuzzerControlFlowOps(std::vector<fuzzerop::OpDescriptor> &Ops); 2809467b48Spatrick void describeFuzzerPointerOps(std::vector<fuzzerop::OpDescriptor> &Ops); 2909467b48Spatrick void describeFuzzerAggregateOps(std::vector<fuzzerop::OpDescriptor> &Ops); 3009467b48Spatrick void describeFuzzerVectorOps(std::vector<fuzzerop::OpDescriptor> &Ops); 3109467b48Spatrick /// @} 3209467b48Spatrick 3309467b48Spatrick namespace fuzzerop { 3409467b48Spatrick 3509467b48Spatrick /// Descriptors for individual operations. 3609467b48Spatrick /// @{ 3709467b48Spatrick OpDescriptor binOpDescriptor(unsigned Weight, Instruction::BinaryOps Op); 3809467b48Spatrick OpDescriptor cmpOpDescriptor(unsigned Weight, Instruction::OtherOps CmpOp, 3909467b48Spatrick CmpInst::Predicate Pred); 4009467b48Spatrick OpDescriptor splitBlockDescriptor(unsigned Weight); 4109467b48Spatrick OpDescriptor gepDescriptor(unsigned Weight); 4209467b48Spatrick OpDescriptor extractValueDescriptor(unsigned Weight); 4309467b48Spatrick OpDescriptor insertValueDescriptor(unsigned Weight); 4409467b48Spatrick OpDescriptor extractElementDescriptor(unsigned Weight); 4509467b48Spatrick OpDescriptor insertElementDescriptor(unsigned Weight); 4609467b48Spatrick OpDescriptor shuffleVectorDescriptor(unsigned Weight); 4709467b48Spatrick /// @} 4809467b48Spatrick 49*d415bd75Srobert } // namespace fuzzerop 5009467b48Spatrick 51*d415bd75Srobert } // namespace llvm 5209467b48Spatrick 5309467b48Spatrick #endif // LLVM_FUZZMUTATE_OPERATIONS_H 54