//===-- CommandFlags.h - Command Line Flags Interface -----------*- 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 contains codegen-specific flags that are shared between different // command line tools. The tools "llc" and "opt" both use this file to prevent // flag duplication. // //===----------------------------------------------------------------------===// #include "llvm/ADT/FloatingPointMode.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/Triple.h" #include "llvm/IR/Instructions.h" #include "llvm/IR/Intrinsics.h" #include "llvm/MC/MCTargetOptionsCommandFlags.h" #include "llvm/Support/CodeGen.h" #include "llvm/Target/TargetOptions.h" #include #include namespace llvm { class Module; namespace codegen { std::string getMArch(); std::string getMCPU(); std::vector getMAttrs(); Reloc::Model getRelocModel(); Optional getExplicitRelocModel(); ThreadModel::Model getThreadModel(); CodeModel::Model getCodeModel(); Optional getExplicitCodeModel(); llvm::ExceptionHandling getExceptionModel(); CodeGenFileType getFileType(); Optional getExplicitFileType(); CodeGenFileType getFileType(); llvm::FramePointer::FP getFramePointerUsage(); bool getEnableUnsafeFPMath(); bool getEnableNoInfsFPMath(); bool getEnableNoNaNsFPMath(); bool getEnableNoSignedZerosFPMath(); bool getEnableNoTrappingFPMath(); DenormalMode::DenormalModeKind getDenormalFPMath(); DenormalMode::DenormalModeKind getDenormalFP32Math(); bool getEnableHonorSignDependentRoundingFPMath(); llvm::FloatABI::ABIType getFloatABIForCalls(); llvm::FPOpFusion::FPOpFusionMode getFuseFPOps(); bool getDontPlaceZerosInBSS(); bool getEnableGuaranteedTailCallOpt(); bool getEnableAIXExtendedAltivecABI(); bool getDisableTailCalls(); bool getStackSymbolOrdering(); unsigned getOverrideStackAlignment(); bool getStackRealign(); std::string getTrapFuncName(); bool getUseCtors(); bool getRelaxELFRelocations(); bool getDataSections(); Optional getExplicitDataSections(); bool getFunctionSections(); Optional getExplicitFunctionSections(); bool getIgnoreXCOFFVisibility(); bool getXCOFFTracebackTable(); std::string getBBSections(); std::string getStackProtectorGuard(); unsigned getStackProtectorGuardOffset(); std::string getStackProtectorGuardReg(); unsigned getTLSSize(); bool getEmulatedTLS(); bool getUniqueSectionNames(); bool getUniqueBasicBlockSectionNames(); llvm::EABI getEABIVersion(); llvm::DebuggerKind getDebuggerTuningOpt(); bool getEnableStackSizeSection(); bool getEnableAddrsig(); bool getEmitCallSiteInfo(); bool getEnableMachineFunctionSplitter(); bool getEnableDebugEntryValues(); bool getPseudoProbeForProfiling(); bool getValueTrackingVariableLocations(); bool getForceDwarfFrameSection(); bool getXRayOmitFunctionIndex(); /// Create this object with static storage to register codegen-related command /// line options. struct RegisterCodeGenFlags { RegisterCodeGenFlags(); }; llvm::BasicBlockSection getBBSectionsMode(llvm::TargetOptions &Options); llvm::StackProtectorGuards getStackProtectorGuardMode(llvm::TargetOptions &Options); /// Common utility function tightly tied to the options listed here. Initializes /// a TargetOptions object with CodeGen flags and returns it. /// \p TheTriple is used to determine the default value for options if /// options are not explicitly specified. If those triple dependant options /// value do not have effect for your component, a default Triple() could be /// passed in. TargetOptions InitTargetOptionsFromCodeGenFlags(const llvm::Triple &TheTriple); std::string getCPUStr(); std::string getFeaturesStr(); std::vector getFeatureList(); void renderBoolStringAttr(AttrBuilder &B, StringRef Name, bool Val); /// Set function attributes of function \p F based on CPU, Features, and command /// line flags. void setFunctionAttributes(StringRef CPU, StringRef Features, Function &F); /// Set function attributes of functions in Module M based on CPU, /// Features, and command line flags. void setFunctionAttributes(StringRef CPU, StringRef Features, Module &M); } // namespace codegen } // namespace llvm