//===--- CodeGenOptions.h ---------------------------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
//  This file defines the CodeGenOptions interface.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_CLANG_FRONTEND_CODEGENOPTIONS_H
#define LLVM_CLANG_FRONTEND_CODEGENOPTIONS_H

#include <string>
#include <vector>

namespace clang {

/// CodeGenOptions - Track various options which control how the code
/// is optimized and passed to the backend.
class CodeGenOptions {
public:
  enum InliningMethod {
    NoInlining,         // Perform no inlining whatsoever.
    NormalInlining,     // Use the standard function inlining pass.
    OnlyAlwaysInlining  // Only run the always inlining pass.
  };

  enum ObjCDispatchMethodKind {
    Legacy = 0,
    NonLegacy = 1,
    Mixed = 2
  };

  enum DebugInfoKind {
    NoDebugInfo,          // Don't generate debug info.
    DebugLineTablesOnly,  // Emit only debug info necessary for generating
                          // line number tables (-gline-tables-only).
    LimitedDebugInfo,     // Limit generated debug info to reduce size
                          // (-flimit-debug-info).
    FullDebugInfo         // Generate complete debug info.
  };

  unsigned AsmVerbose        : 1; ///< -dA, -fverbose-asm.
  unsigned ObjCAutoRefCountExceptions : 1; ///< Whether ARC should be EH-safe.
  unsigned CUDAIsDevice      : 1; ///< Set when compiling for CUDA device.
  unsigned CXAAtExit         : 1; ///< Use __cxa_atexit for calling destructors.
  unsigned CXXCtorDtorAliases: 1; ///< Emit complete ctors/dtors as linker
                                  ///< aliases to base ctors when possible.
  unsigned DataSections      : 1; ///< Set when -fdata-sections is enabled
  unsigned DisableFPElim     : 1; ///< Set when -fomit-frame-pointer is enabled.
  unsigned DisableLLVMOpts   : 1; ///< Don't run any optimizations, for use in
                                  ///< getting .bc files that correspond to the
                                  ///< internal state before optimizations are
                                  ///< done.
  unsigned DisableRedZone    : 1; ///< Set when -mno-red-zone is enabled.
  unsigned DisableTailCalls  : 1; ///< Do not emit tail calls.
  unsigned EmitDeclMetadata  : 1; ///< Emit special metadata indicating what
                                  ///< Decl* various IR entities came from. Only
                                  ///< useful when running CodeGen as a
                                  ///< subroutine.
  unsigned EmitGcovArcs      : 1; ///< Emit coverage data files, aka. GCDA.
  unsigned EmitGcovNotes     : 1; ///< Emit coverage "notes" files, aka GCNO.
  unsigned ForbidGuardVariables : 1; ///< Issue errors if C++ guard variables
                                     ///< are required
  unsigned FunctionSections  : 1; ///< Set when -ffunction-sections is enabled
  unsigned HiddenWeakTemplateVTables : 1; ///< Emit weak vtables and RTTI for
                                  ///< template classes with hidden visibility
  unsigned HiddenWeakVTables : 1; ///< Emit weak vtables, RTTI, and thunks with
                                  ///< hidden visibility.
  unsigned InstrumentFunctions : 1; ///< Set when -finstrument-functions is
                                    ///< enabled.
  unsigned InstrumentForProfiling : 1; ///< Set when -pg is enabled
  unsigned LessPreciseFPMAD  : 1; ///< Enable less precise MAD instructions to
                                  ///< be generated.
  unsigned MergeAllConstants : 1; ///< Merge identical constants.
  unsigned NoCommon          : 1; ///< Set when -fno-common or C++ is enabled.
  unsigned NoDwarf2CFIAsm    : 1; ///< Set when -fno-dwarf2-cfi-asm is enabled.
  unsigned NoDwarfDirectoryAsm : 1; ///< Set when -fno-dwarf-directory-asm is
                                    ///< enabled.
  unsigned NoExecStack       : 1; ///< Set when -Wa,--noexecstack is enabled.
  unsigned NoGlobalMerge     : 1; ///< Set when -mno-global-merge is enabled.
  unsigned NoImplicitFloat   : 1; ///< Set when -mno-implicit-float is enabled.
  unsigned NoInfsFPMath      : 1; ///< Assume FP arguments, results not +-Inf.
  unsigned NoInline          : 1; ///< Set when -fno-inline is enabled. Disables
                                  ///< use of the inline keyword.
  unsigned NoNaNsFPMath      : 1; ///< Assume FP arguments, results not NaN.
  unsigned NoZeroInitializedInBSS : 1; ///< -fno-zero-initialized-in-bss
  unsigned ObjCDispatchMethod : 2; ///< Method of Objective-C dispatch to use.
  unsigned OmitLeafFramePointer : 1; ///< Set when -momit-leaf-frame-pointer is
                                     ///< enabled.
  unsigned OptimizationLevel : 3; ///< The -O[0-4] option specified.
  unsigned OptimizeSize      : 2; ///< If -Os (==1) or -Oz (==2) is specified.
  unsigned RelaxAll          : 1; ///< Relax all machine code instructions.
  unsigned RelaxedAliasing   : 1; ///< Set when -fno-strict-aliasing is enabled.
  unsigned SaveTempLabels    : 1; ///< Save temporary labels.
  unsigned SimplifyLibCalls  : 1; ///< Set when -fbuiltin is enabled.
  unsigned SoftFloat         : 1; ///< -soft-float.
  unsigned StrictEnums       : 1; ///< Optimize based on strict enum definition.
  unsigned TimePasses        : 1; ///< Set when -ftime-report is enabled.
  unsigned UnitAtATime       : 1; ///< Unused. For mirroring GCC optimization
                                  /// selection.
  unsigned UnrollLoops       : 1; ///< Control whether loops are unrolled.
  unsigned UnsafeFPMath      : 1; ///< Allow unsafe floating point optzns.
  unsigned UnwindTables      : 1; ///< Emit unwind tables.

  /// Attempt to use register sized accesses to bit-fields in structures, when
  /// possible.
  unsigned UseRegisterSizedBitfieldAccess : 1;

  unsigned VerifyModule      : 1; ///< Control whether the module should be run
                                  ///< through the LLVM Verifier.

  unsigned StackRealignment  : 1; ///< Control whether to permit stack
                                  ///< realignment.
  unsigned UseInitArray      : 1; ///< Control whether to use .init_array or
                                  ///< .ctors.
  unsigned StackAlignment;        ///< Overrides default stack alignment,
                                  ///< if not 0.

  /// The code model to use (-mcmodel).
  std::string CodeModel;

  /// The filename with path we use for coverage files. The extension will be
  /// replaced.
  std::string CoverageFile;

  /// Enable additional debugging information.
  std::string DebugPass;

  /// The string to embed in debug information as the current working directory.
  std::string DebugCompilationDir;

  /// The kind of generated debug info.
  DebugInfoKind DebugInfo;

  /// The string to embed in the debug information for the compile unit, if
  /// non-empty.
  std::string DwarfDebugFlags;

  /// The ABI to use for passing floating point arguments.
  std::string FloatABI;

  /// The float precision limit to use, if non-empty.
  std::string LimitFloatPrecision;

  /// The name of the bitcode file to link before optzns.
  std::string LinkBitcodeFile;

  /// The kind of inlining to perform.
  InliningMethod Inlining;

  /// The user provided name for the "main file", if non-empty. This is useful
  /// in situations where the input file name does not match the original input
  /// file, for example with -save-temps.
  std::string MainFileName;

  /// The name of the relocation model to use.
  std::string RelocationModel;

  /// If not an empty string, trap intrinsics are lowered to calls to this
  /// function instead of to trap instructions.
  std::string TrapFuncName;

  /// A list of command-line options to forward to the LLVM backend.
  std::vector<std::string> BackendOptions;

  /// The user specified number of registers to be used for integral arguments,
  /// or 0 if unspecified.
  unsigned NumRegisterParameters;

  /// The run-time penalty for bounds checking, or 0 to disable.
  unsigned char BoundsChecking;

public:
  CodeGenOptions() {
    AsmVerbose = 0;
    CUDAIsDevice = 0;
    CXAAtExit = 1;
    CXXCtorDtorAliases = 0;
    DataSections = 0;
    DisableFPElim = 0;
    DisableLLVMOpts = 0;
    DisableRedZone = 0;
    DisableTailCalls = 0;
    EmitDeclMetadata = 0;
    EmitGcovArcs = 0;
    EmitGcovNotes = 0;
    ForbidGuardVariables = 0;
    FunctionSections = 0;
    HiddenWeakTemplateVTables = 0;
    HiddenWeakVTables = 0;
    InstrumentFunctions = 0;
    InstrumentForProfiling = 0;
    LessPreciseFPMAD = 0;
    MergeAllConstants = 1;
    NoCommon = 0;
    NoDwarf2CFIAsm = 0;
    NoImplicitFloat = 0;
    NoInfsFPMath = 0;
    NoInline = 0;
    NoNaNsFPMath = 0;
    NoZeroInitializedInBSS = 0;
    NumRegisterParameters = 0;
    ObjCAutoRefCountExceptions = 0;
    ObjCDispatchMethod = Legacy;
    OmitLeafFramePointer = 0;
    OptimizationLevel = 0;
    OptimizeSize = 0;
    RelaxAll = 0;
    RelaxedAliasing = 0;
    SaveTempLabels = 0;
    SimplifyLibCalls = 1;
    SoftFloat = 0;
    StrictEnums = 0;
    TimePasses = 0;
    UnitAtATime = 1;
    UnrollLoops = 0;
    UnsafeFPMath = 0;
    UnwindTables = 0;
    UseRegisterSizedBitfieldAccess = 0;
    VerifyModule = 1;
    StackRealignment = 0;
    StackAlignment = 0;
    BoundsChecking = 0;
    UseInitArray = 0;

    DebugInfo = NoDebugInfo;
    Inlining = NoInlining;
    RelocationModel = "pic";
  }

  ObjCDispatchMethodKind getObjCDispatchMethod() const {
    return ObjCDispatchMethodKind(ObjCDispatchMethod);
  }
};

}  // end namespace clang

#endif
