// Copyright (c) 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef SOURCE_FUZZ_REPEATED_PASS_INSTANCES_H_
#define SOURCE_FUZZ_REPEATED_PASS_INSTANCES_H_

#include "source/fuzz/fuzzer_pass_add_access_chains.h"
#include "source/fuzz/fuzzer_pass_add_bit_instruction_synonyms.h"
#include "source/fuzz/fuzzer_pass_add_composite_inserts.h"
#include "source/fuzz/fuzzer_pass_add_composite_types.h"
#include "source/fuzz/fuzzer_pass_add_copy_memory.h"
#include "source/fuzz/fuzzer_pass_add_dead_blocks.h"
#include "source/fuzz/fuzzer_pass_add_dead_breaks.h"
#include "source/fuzz/fuzzer_pass_add_dead_continues.h"
#include "source/fuzz/fuzzer_pass_add_equation_instructions.h"
#include "source/fuzz/fuzzer_pass_add_function_calls.h"
#include "source/fuzz/fuzzer_pass_add_global_variables.h"
#include "source/fuzz/fuzzer_pass_add_image_sample_unused_components.h"
#include "source/fuzz/fuzzer_pass_add_loads.h"
#include "source/fuzz/fuzzer_pass_add_local_variables.h"
#include "source/fuzz/fuzzer_pass_add_loop_preheaders.h"
#include "source/fuzz/fuzzer_pass_add_loops_to_create_int_constant_synonyms.h"
#include "source/fuzz/fuzzer_pass_add_opphi_synonyms.h"
#include "source/fuzz/fuzzer_pass_add_parameters.h"
#include "source/fuzz/fuzzer_pass_add_relaxed_decorations.h"
#include "source/fuzz/fuzzer_pass_add_stores.h"
#include "source/fuzz/fuzzer_pass_add_synonyms.h"
#include "source/fuzz/fuzzer_pass_add_vector_shuffle_instructions.h"
#include "source/fuzz/fuzzer_pass_apply_id_synonyms.h"
#include "source/fuzz/fuzzer_pass_construct_composites.h"
#include "source/fuzz/fuzzer_pass_copy_objects.h"
#include "source/fuzz/fuzzer_pass_donate_modules.h"
#include "source/fuzz/fuzzer_pass_duplicate_regions_with_selections.h"
#include "source/fuzz/fuzzer_pass_flatten_conditional_branches.h"
#include "source/fuzz/fuzzer_pass_inline_functions.h"
#include "source/fuzz/fuzzer_pass_invert_comparison_operators.h"
#include "source/fuzz/fuzzer_pass_make_vector_operations_dynamic.h"
#include "source/fuzz/fuzzer_pass_merge_blocks.h"
#include "source/fuzz/fuzzer_pass_merge_function_returns.h"
#include "source/fuzz/fuzzer_pass_mutate_pointers.h"
#include "source/fuzz/fuzzer_pass_obfuscate_constants.h"
#include "source/fuzz/fuzzer_pass_outline_functions.h"
#include "source/fuzz/fuzzer_pass_permute_blocks.h"
#include "source/fuzz/fuzzer_pass_permute_function_parameters.h"
#include "source/fuzz/fuzzer_pass_permute_instructions.h"
#include "source/fuzz/fuzzer_pass_propagate_instructions_down.h"
#include "source/fuzz/fuzzer_pass_propagate_instructions_up.h"
#include "source/fuzz/fuzzer_pass_push_ids_through_variables.h"
#include "source/fuzz/fuzzer_pass_replace_adds_subs_muls_with_carrying_extended.h"
#include "source/fuzz/fuzzer_pass_replace_branches_from_dead_blocks_with_exits.h"
#include "source/fuzz/fuzzer_pass_replace_copy_memories_with_loads_stores.h"
#include "source/fuzz/fuzzer_pass_replace_copy_objects_with_stores_loads.h"
#include "source/fuzz/fuzzer_pass_replace_irrelevant_ids.h"
#include "source/fuzz/fuzzer_pass_replace_linear_algebra_instructions.h"
#include "source/fuzz/fuzzer_pass_replace_loads_stores_with_copy_memories.h"
#include "source/fuzz/fuzzer_pass_replace_opphi_ids_from_dead_predecessors.h"
#include "source/fuzz/fuzzer_pass_replace_opselects_with_conditional_branches.h"
#include "source/fuzz/fuzzer_pass_replace_parameter_with_global.h"
#include "source/fuzz/fuzzer_pass_replace_params_with_struct.h"
#include "source/fuzz/fuzzer_pass_split_blocks.h"
#include "source/fuzz/fuzzer_pass_swap_conditional_branch_operands.h"
#include "source/fuzz/fuzzer_pass_wrap_regions_in_selections.h"

namespace spvtools {
namespace fuzz {

// This class has a distinct member for each repeated fuzzer pass (i.e., a
// fuzzer pass that it makes sense to run multiple times).  If a member is null
// then we do not have an instance of that fuzzer pass, i.e. it is disabled.
// The class also provides access to the set of passes that are enabled.
class RepeatedPassInstances {
// This macro should be invoked below for every repeated fuzzer pass.  If a
// repeated fuzzer pass is called FuzzerPassFoo then the macro invocation:
//
//    REPEATED_PASS_INSTANCE(Foo);
//
// should be used.  This adds a private member of type FuzzerPassFoo*, and
// provides the following public methods:
//
// // Requires that SetPass has not been called previously with FuzzerPassFoo.
// // Adds |pass| to the set of known pass instances.
// void SetPass(std::unique_ptr<FuzzerPassFoo> pass);
//
// // Returns a pointer to a pass instance of type FuzzerPassFoo that was
// // previously registered via SetPass(), or nullptr if no such instance was
// // registered
// FuzzerPassFoo* GetFoo();
#define REPEATED_PASS_INSTANCE(NAME)                                     \
 public:                                                                 \
  FuzzerPass##NAME* Get##NAME() const { return NAME##_; }                \
  void SetPass(std::unique_ptr<FuzzerPass##NAME> pass) {                 \
    assert(NAME##_ == nullptr && "Attempt to set pass multiple times."); \
    NAME##_ = pass.get();                                                \
    passes_.push_back(std::move(pass));                                  \
  }                                                                      \
                                                                         \
 private:                                                                \
  FuzzerPass##NAME* NAME##_ = nullptr

  REPEATED_PASS_INSTANCE(AddAccessChains);
  REPEATED_PASS_INSTANCE(AddBitInstructionSynonyms);
  REPEATED_PASS_INSTANCE(AddCompositeInserts);
  REPEATED_PASS_INSTANCE(AddCompositeTypes);
  REPEATED_PASS_INSTANCE(AddCopyMemory);
  REPEATED_PASS_INSTANCE(AddDeadBlocks);
  REPEATED_PASS_INSTANCE(AddDeadBreaks);
  REPEATED_PASS_INSTANCE(AddDeadContinues);
  REPEATED_PASS_INSTANCE(AddEquationInstructions);
  REPEATED_PASS_INSTANCE(AddFunctionCalls);
  REPEATED_PASS_INSTANCE(AddGlobalVariables);
  REPEATED_PASS_INSTANCE(AddImageSampleUnusedComponents);
  REPEATED_PASS_INSTANCE(AddLoads);
  REPEATED_PASS_INSTANCE(AddLocalVariables);
  REPEATED_PASS_INSTANCE(AddLoopPreheaders);
  REPEATED_PASS_INSTANCE(AddLoopsToCreateIntConstantSynonyms);
  REPEATED_PASS_INSTANCE(AddOpPhiSynonyms);
  REPEATED_PASS_INSTANCE(AddParameters);
  REPEATED_PASS_INSTANCE(AddRelaxedDecorations);
  REPEATED_PASS_INSTANCE(AddStores);
  REPEATED_PASS_INSTANCE(AddSynonyms);
  REPEATED_PASS_INSTANCE(AddVectorShuffleInstructions);
  REPEATED_PASS_INSTANCE(ApplyIdSynonyms);
  REPEATED_PASS_INSTANCE(ConstructComposites);
  REPEATED_PASS_INSTANCE(CopyObjects);
  REPEATED_PASS_INSTANCE(DonateModules);
  REPEATED_PASS_INSTANCE(DuplicateRegionsWithSelections);
  REPEATED_PASS_INSTANCE(FlattenConditionalBranches);
  REPEATED_PASS_INSTANCE(InlineFunctions);
  REPEATED_PASS_INSTANCE(InvertComparisonOperators);
  REPEATED_PASS_INSTANCE(MakeVectorOperationsDynamic);
  REPEATED_PASS_INSTANCE(MergeBlocks);
  REPEATED_PASS_INSTANCE(MergeFunctionReturns);
  REPEATED_PASS_INSTANCE(MutatePointers);
  REPEATED_PASS_INSTANCE(ObfuscateConstants);
  REPEATED_PASS_INSTANCE(OutlineFunctions);
  REPEATED_PASS_INSTANCE(PermuteBlocks);
  REPEATED_PASS_INSTANCE(PermuteFunctionParameters);
  REPEATED_PASS_INSTANCE(PermuteInstructions);
  REPEATED_PASS_INSTANCE(PropagateInstructionsDown);
  REPEATED_PASS_INSTANCE(PropagateInstructionsUp);
  REPEATED_PASS_INSTANCE(PushIdsThroughVariables);
  REPEATED_PASS_INSTANCE(ReplaceAddsSubsMulsWithCarryingExtended);
  REPEATED_PASS_INSTANCE(ReplaceBranchesFromDeadBlocksWithExits);
  REPEATED_PASS_INSTANCE(ReplaceCopyMemoriesWithLoadsStores);
  REPEATED_PASS_INSTANCE(ReplaceCopyObjectsWithStoresLoads);
  REPEATED_PASS_INSTANCE(ReplaceLoadsStoresWithCopyMemories);
  REPEATED_PASS_INSTANCE(ReplaceIrrelevantIds);
  REPEATED_PASS_INSTANCE(ReplaceOpPhiIdsFromDeadPredecessors);
  REPEATED_PASS_INSTANCE(ReplaceOpSelectsWithConditionalBranches);
  REPEATED_PASS_INSTANCE(ReplaceParameterWithGlobal);
  REPEATED_PASS_INSTANCE(ReplaceLinearAlgebraInstructions);
  REPEATED_PASS_INSTANCE(ReplaceParamsWithStruct);
  REPEATED_PASS_INSTANCE(SplitBlocks);
  REPEATED_PASS_INSTANCE(SwapBranchConditionalOperands);
  REPEATED_PASS_INSTANCE(WrapRegionsInSelections);
#undef REPEATED_PASS_INSTANCE

 public:
  // Yields the sequence of fuzzer pass instances that have been registered.
  const std::vector<std::unique_ptr<FuzzerPass>>& GetPasses() const {
    return passes_;
  }

 private:
  // The distinct fuzzer pass instances that have been registered via SetPass().
  std::vector<std::unique_ptr<FuzzerPass>> passes_;
};

}  // namespace fuzz
}  // namespace spvtools

#endif  // SOURCE_FUZZ_REPEATED_PASS_INSTANCES_H_
