123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //===-- llvm/Support/CodeGen.h - CodeGen Concepts ---------------*- 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
- //
- //===----------------------------------------------------------------------===//
- //
- // This file define some types which define code generation concepts. For
- // example, relocation model.
- //
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_SUPPORT_CODEGEN_H
- #define LLVM_SUPPORT_CODEGEN_H
- #include <cstdint>
- #include <optional>
- namespace llvm {
- // Relocation model types.
- namespace Reloc {
- // Cannot be named PIC due to collision with -DPIC
- enum Model { Static, PIC_, DynamicNoPIC, ROPI, RWPI, ROPI_RWPI };
- }
- // Code model types.
- namespace CodeModel {
- // Sync changes with CodeGenCWrappers.h.
- enum Model { Tiny, Small, Kernel, Medium, Large };
- }
- namespace PICLevel {
- // This is used to map -fpic/-fPIC.
- enum Level { NotPIC=0, SmallPIC=1, BigPIC=2 };
- }
- namespace PIELevel {
- enum Level { Default=0, Small=1, Large=2 };
- }
- // TLS models.
- namespace TLSModel {
- enum Model {
- GeneralDynamic,
- LocalDynamic,
- InitialExec,
- LocalExec
- };
- }
- namespace CodeGenOpt {
- /// Type for the unique integer IDs of code generation optimization levels.
- using IDType = int;
- /// Code generation optimization level.
- enum Level : IDType {
- None = 0, ///< -O0
- Less = 1, ///< -O1
- Default = 2, ///< -O2, -Os
- Aggressive = 3 ///< -O3
- };
- /// Get the \c Level identified by the integer \p ID.
- ///
- /// Returns std::nullopt if \p ID is invalid.
- inline std::optional<Level> getLevel(IDType ID) {
- if (ID < 0 || ID > 3)
- return std::nullopt;
- return static_cast<Level>(ID);
- }
- /// Parse \p C as a single digit integer ID and get matching \c Level.
- ///
- /// Returns std::nullopt if the input is not a valid digit or not a valid ID.
- inline std::optional<Level> parseLevel(char C) {
- if (C < '0')
- return std::nullopt;
- return getLevel(static_cast<IDType>(C - '0'));
- }
- } // namespace CodeGenOpt
- /// These enums are meant to be passed into addPassesToEmitFile to indicate
- /// what type of file to emit, and returned by it to indicate what type of
- /// file could actually be made.
- enum CodeGenFileType {
- CGFT_AssemblyFile,
- CGFT_ObjectFile,
- CGFT_Null // Do not emit any output.
- };
- // Specify what functions should keep the frame pointer.
- enum class FramePointerKind { None, NonLeaf, All };
- // Specify what type of zeroing callee-used registers.
- namespace ZeroCallUsedRegs {
- const unsigned ONLY_USED = 1U << 1;
- const unsigned ONLY_GPR = 1U << 2;
- const unsigned ONLY_ARG = 1U << 3;
- enum class ZeroCallUsedRegsKind : unsigned int {
- // Don't zero any call-used regs.
- Skip = 1U << 0,
- // Only zeros call-used GPRs used in the fn and pass args.
- UsedGPRArg = ONLY_USED | ONLY_GPR | ONLY_ARG,
- // Only zeros call-used GPRs used in the fn.
- UsedGPR = ONLY_USED | ONLY_GPR,
- // Only zeros call-used regs used in the fn and pass args.
- UsedArg = ONLY_USED | ONLY_ARG,
- // Only zeros call-used regs used in the fn.
- Used = ONLY_USED,
- // Zeros all call-used GPRs that pass args.
- AllGPRArg = ONLY_GPR | ONLY_ARG,
- // Zeros all call-used GPRs.
- AllGPR = ONLY_GPR,
- // Zeros all call-used regs that pass args.
- AllArg = ONLY_ARG,
- // Zeros all call-used regs.
- All = 0,
- };
- } // namespace ZeroCallUsedRegs
- enum class UWTableKind {
- None = 0, ///< No unwind table requested
- Sync = 1, ///< "Synchronous" unwind tables
- Async = 2, ///< "Asynchronous" unwind tables (instr precise)
- Default = 2,
- };
- enum class FunctionReturnThunksKind : unsigned int {
- Keep = 0, ///< No function return thunk.
- Extern = 1, ///< Replace returns with jump to thunk, don't emit thunk.
- Invalid = 2, ///< Not used.
- };
- } // namespace llvm
- #endif
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|