//===-- CodeTemplate.h ------------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /// /// \file /// A set of structures and functions to craft instructions for the /// SnippetGenerator. /// //===----------------------------------------------------------------------===// #ifndef LLVM_TOOLS_LLVM_EXEGESIS_CODETEMPLATE_H #define LLVM_TOOLS_LLVM_EXEGESIS_CODETEMPLATE_H #include "MCInstrDescView.h" #include "llvm/ADT/BitmaskEnum.h" namespace llvm { namespace exegesis { // A template for an Instruction holding values for each of its Variables. struct InstructionTemplate { … }; enum class ExecutionMode : uint8_t { … }; // Returns whether Execution is one of the values defined in the enum above. bool isEnumValue(ExecutionMode Execution); // Returns a human readable string for the enum. StringRef getName(ExecutionMode Execution); // Returns a sequence of increasing powers of two corresponding to all the // Execution flags. ArrayRef<ExecutionMode> getAllExecutionBits(); // Decomposes Execution into individual set bits. SmallVector<ExecutionMode, 4> getExecutionModeBits(ExecutionMode); LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE(…); // A CodeTemplate is a set of InstructionTemplates that may not be fully // specified (i.e. some variables are not yet set). This allows the // SnippetGenerator to instantiate it many times with specific values to study // their impact on instruction's performance. struct CodeTemplate { … }; } // namespace exegesis } // namespace llvm #endif // LLVM_TOOLS_LLVM_EXEGESIS_CODETEMPLATE_H