T select(std::mt19937_64 &rng) const
constexpr ReturnOptionsMutationConfig BASIC_RETURN_OPTIONS_MUTATION_CONFIGURATION
constexpr JumpIfMutationConfig BASIC_JUMP_IF_MUTATION_CONFIGURATION
JumpIfToBlockMutationOptions
constexpr MemoryTagGenerationConfig BASIC_MEMORY_TAG_GENERATION_CONFIGURATION
CFGInstructionGenerationOptions
@ InsertSimpleInstructionBlock
@ SwitchToNonTerminatedBlock
constexpr Uint16MutationConfig BASIC_UINT16_T_MUTATION_CONFIGURATION
@ else_program_block_instruction_block_idx
@ then_program_block_instruction_block_idx
constexpr VecMutationConfig BASIC_VEC_MUTATION_CONFIGURATION
constexpr JumpIfToBlockMutationConfig BASIC_JUMP_IF_TO_BLOCK_MUTATION_CONFIGURATION
constexpr CFGInstructionGenerationConfig BASIC_CFG_INSTRUCTION_GENERATION_CONFIGURATION
std::variant< InsertSimpleInstructionBlock, JumpToNewBlock, JumpIfToNewBlock, JumpToBlock, JumpIfToBlock, FinalizeWithReturn, SwitchToNonTerminatedBlock, InsertInternalCall > CFGInstruction
void mutate_insert_internal_call(InsertInternalCall &instr, std::mt19937_64 &rng)
void mutate_insert_simple_instruction_block(InsertSimpleInstructionBlock &instr, std::mt19937_64 &rng)
void mutate_jump_to_block(JumpToBlock &instr, std::mt19937_64 &rng)
void mutate_switch_to_non_terminated_block(SwitchToNonTerminatedBlock &instr, std::mt19937_64 &rng)
void mutate_jump_if_to_block(JumpIfToBlock &instr, std::mt19937_64 &rng)
void mutate_jump_if_to_new_block(JumpIfToNewBlock &instr, std::mt19937_64 &rng)
CFGInstruction generate_cfg_instruction(std::mt19937_64 &rng)
void mutate_control_flow_vec(std::vector< CFGInstruction > &control_flow_vec, std::mt19937_64 &rng)
void mutate_jump_to_new_block(JumpToNewBlock &instr, std::mt19937_64 &rng)
void mutate_finalize_with_return(FinalizeWithReturn &instr, std::mt19937_64 &rng)
void mutate_cfg_instruction(CFGInstruction &cfg_instruction, std::mt19937_64 &rng)
MemoryTag generate_memory_tag(std::mt19937_64 &rng, const MemoryTagGenerationConfig &config)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
void mutate_return_options(ReturnOptions &return_options, std::mt19937_64 &rng, const ReturnOptionsMutationConfig &config)
finalizes the current block with Return and switches to the first non-terminated block
ReturnOptions return_options
inserts INTERNALCALL instruction to the current block creates a new block and sets it as the current ...
uint16_t target_program_block_instruction_block_idx
insert instruction block to the current block
uint16_t instruction_block_idx
finalizes the current block with a JumpI and Jump instructions to the block, which does not create a ...
uint16_t condition_offset_index
uint16_t target_then_block_idx
uint16_t target_else_block_idx
finalizes the current block with jump if, creates two new blocks, sets the first as the then block an...
uint16_t condition_offset_index
uint16_t else_program_block_instruction_block_idx
uint16_t then_program_block_instruction_block_idx
finalizes the current block with a jump to the block, which does not create a loop in the graph (defi...
uint16_t target_block_idx
finalizes the current block with jump, creates a new block and sets it as the current block
uint16_t target_program_block_instruction_block_idx
switches to the non-terminated block with the chosen index
uint16_t non_terminated_block_idx
void mutate_uint16_t(uint16_t &value, std::mt19937_64 &rng, const Uint16MutationConfig &config)
uint16_t generate_random_uint16(std::mt19937_64 &rng)
uint8_t generate_random_uint8(std::mt19937_64 &rng)
template void mutate_vec< CFGInstruction >(std::vector< CFGInstruction > &vec, std::mt19937_64 &rng, std::function< void(CFGInstruction &, std::mt19937_64 &)> mutate_element_function, std::function< CFGInstruction(std::mt19937_64 &)> generate_random_element_function, const VecMutationConfig &config)