1c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot//===-- Operations.h - ----------------------------------------*- C++ -*-===//
2c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot//
3c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot//                     The LLVM Compiler Infrastructure
4c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot//
5c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot// This file is distributed under the University of Illinois Open Source
6c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot// License. See LICENSE.TXT for details.
7c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot//
8c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot//===----------------------------------------------------------------------===//
9c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot//
10c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot// Implementations of common fuzzer operation descriptors for building an IR
11c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot// mutator.
12c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot//
13c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot//===----------------------------------------------------------------------===//
14c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
15c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#ifndef LLVM_FUZZMUTATE_OPERATIONS_H
16c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#define LLVM_FUZZMUTATE_OPERATIONS_H
17c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
18c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#include "llvm/FuzzMutate/OpDescriptor.h"
19c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#include "llvm/IR/InstrTypes.h"
20c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#include "llvm/IR/Instruction.h"
21c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
22c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotnamespace llvm {
23c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
24c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot/// Getters for the default sets of operations, per general category.
25c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot/// @{
26c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotvoid describeFuzzerIntOps(std::vector<fuzzerop::OpDescriptor> &Ops);
27c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotvoid describeFuzzerFloatOps(std::vector<fuzzerop::OpDescriptor> &Ops);
28c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotvoid describeFuzzerControlFlowOps(std::vector<fuzzerop::OpDescriptor> &Ops);
29c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotvoid describeFuzzerPointerOps(std::vector<fuzzerop::OpDescriptor> &Ops);
30c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotvoid describeFuzzerAggregateOps(std::vector<fuzzerop::OpDescriptor> &Ops);
31c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotvoid describeFuzzerVectorOps(std::vector<fuzzerop::OpDescriptor> &Ops);
32c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot/// @}
33c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
34c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robotnamespace fuzzerop {
35c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
36c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot/// Descriptors for individual operations.
37c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot/// @{
38c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team RobotOpDescriptor binOpDescriptor(unsigned Weight, Instruction::BinaryOps Op);
39c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team RobotOpDescriptor cmpOpDescriptor(unsigned Weight, Instruction::OtherOps CmpOp,
40c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot                             CmpInst::Predicate Pred);
41c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team RobotOpDescriptor splitBlockDescriptor(unsigned Weight);
42c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team RobotOpDescriptor gepDescriptor(unsigned Weight);
43c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team RobotOpDescriptor extractValueDescriptor(unsigned Weight);
44c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team RobotOpDescriptor insertValueDescriptor(unsigned Weight);
45c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team RobotOpDescriptor extractElementDescriptor(unsigned Weight);
46c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team RobotOpDescriptor insertElementDescriptor(unsigned Weight);
47c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team RobotOpDescriptor shuffleVectorDescriptor(unsigned Weight);
48c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot/// @}
49c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
50c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot} // end fuzzerop namespace
51c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
52c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot} // end llvm namespace
53c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot
54c9cc9e7d29b8970d8ddb734c88fb62d01e0b727android-build-team Robot#endif // LLVM_FUZZMUTATE_OPERATIONS_H
55