1326938Sdim//===-- Operations.h - ----------------------------------------*- C++ -*-===// 2326938Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6326938Sdim// 7326938Sdim//===----------------------------------------------------------------------===// 8326938Sdim// 9326938Sdim// Implementations of common fuzzer operation descriptors for building an IR 10326938Sdim// mutator. 11326938Sdim// 12326938Sdim//===----------------------------------------------------------------------===// 13326938Sdim 14326938Sdim#ifndef LLVM_FUZZMUTATE_OPERATIONS_H 15326938Sdim#define LLVM_FUZZMUTATE_OPERATIONS_H 16326938Sdim 17326938Sdim#include "llvm/FuzzMutate/OpDescriptor.h" 18326938Sdim#include "llvm/IR/InstrTypes.h" 19326938Sdim#include "llvm/IR/Instruction.h" 20326938Sdim 21326938Sdimnamespace llvm { 22326938Sdim 23326938Sdim/// Getters for the default sets of operations, per general category. 24326938Sdim/// @{ 25326938Sdimvoid describeFuzzerIntOps(std::vector<fuzzerop::OpDescriptor> &Ops); 26326938Sdimvoid describeFuzzerFloatOps(std::vector<fuzzerop::OpDescriptor> &Ops); 27326938Sdimvoid describeFuzzerControlFlowOps(std::vector<fuzzerop::OpDescriptor> &Ops); 28326938Sdimvoid describeFuzzerPointerOps(std::vector<fuzzerop::OpDescriptor> &Ops); 29326938Sdimvoid describeFuzzerAggregateOps(std::vector<fuzzerop::OpDescriptor> &Ops); 30326938Sdimvoid describeFuzzerVectorOps(std::vector<fuzzerop::OpDescriptor> &Ops); 31326938Sdim/// @} 32326938Sdim 33326938Sdimnamespace fuzzerop { 34326938Sdim 35326938Sdim/// Descriptors for individual operations. 36326938Sdim/// @{ 37326938SdimOpDescriptor binOpDescriptor(unsigned Weight, Instruction::BinaryOps Op); 38326938SdimOpDescriptor cmpOpDescriptor(unsigned Weight, Instruction::OtherOps CmpOp, 39326938Sdim CmpInst::Predicate Pred); 40326938SdimOpDescriptor splitBlockDescriptor(unsigned Weight); 41326938SdimOpDescriptor gepDescriptor(unsigned Weight); 42326938SdimOpDescriptor extractValueDescriptor(unsigned Weight); 43326938SdimOpDescriptor insertValueDescriptor(unsigned Weight); 44326938SdimOpDescriptor extractElementDescriptor(unsigned Weight); 45326938SdimOpDescriptor insertElementDescriptor(unsigned Weight); 46326938SdimOpDescriptor shuffleVectorDescriptor(unsigned Weight); 47326938Sdim/// @} 48326938Sdim 49326938Sdim} // end fuzzerop namespace 50326938Sdim 51326938Sdim} // end llvm namespace 52326938Sdim 53326938Sdim#endif // LLVM_FUZZMUTATE_OPERATIONS_H 54