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