clang 22.0.0git
BackendUtil.cpp File Reference
#include "clang/CodeGen/BackendUtil.h"
#include "BackendConsumer.h"
#include "LinkInModulesPass.h"
#include "clang/Basic/CodeGenOptions.h"
#include "clang/Basic/Diagnostic.h"
#include "clang/Basic/LangOptions.h"
#include "clang/Basic/TargetOptions.h"
#include "clang/Frontend/FrontendDiagnostic.h"
#include "clang/Frontend/Utils.h"
#include "clang/Lex/HeaderSearchOptions.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/Analysis/GlobalsModRef.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/Bitcode/BitcodeReader.h"
#include "llvm/Bitcode/BitcodeWriter.h"
#include "llvm/Bitcode/BitcodeWriterPass.h"
#include "llvm/CodeGen/TargetSubtargetInfo.h"
#include "llvm/Config/llvm-config.h"
#include "llvm/Frontend/Driver/CodeGenOptions.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DebugInfo.h"
#include "llvm/IR/LegacyPassManager.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/ModuleSummaryIndex.h"
#include "llvm/IR/PassManager.h"
#include "llvm/IR/Verifier.h"
#include "llvm/IRPrinter/IRPrintingPasses.h"
#include "llvm/LTO/LTOBackend.h"
#include "llvm/MC/TargetRegistry.h"
#include "llvm/Object/OffloadBinary.h"
#include "llvm/Passes/PassBuilder.h"
#include "llvm/Passes/PassPlugin.h"
#include "llvm/Passes/StandardInstrumentations.h"
#include "llvm/ProfileData/InstrProfCorrelator.h"
#include "llvm/Support/BuryPointer.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/PrettyStackTrace.h"
#include "llvm/Support/Program.h"
#include "llvm/Support/TimeProfiler.h"
#include "llvm/Support/Timer.h"
#include "llvm/Support/ToolOutputFile.h"
#include "llvm/Support/VirtualFileSystem.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Target/TargetOptions.h"
#include "llvm/TargetParser/SubtargetFeature.h"
#include "llvm/TargetParser/Triple.h"
#include "llvm/Transforms/HipStdPar/HipStdPar.h"
#include "llvm/Transforms/IPO/EmbedBitcodePass.h"
#include "llvm/Transforms/IPO/LowerTypeTests.h"
#include "llvm/Transforms/IPO/ThinLTOBitcodeWriter.h"
#include "llvm/Transforms/InstCombine/InstCombine.h"
#include "llvm/Transforms/Instrumentation/AddressSanitizer.h"
#include "llvm/Transforms/Instrumentation/AddressSanitizerOptions.h"
#include "llvm/Transforms/Instrumentation/BoundsChecking.h"
#include "llvm/Transforms/Instrumentation/DataFlowSanitizer.h"
#include "llvm/Transforms/Instrumentation/GCOVProfiler.h"
#include "llvm/Transforms/Instrumentation/HWAddressSanitizer.h"
#include "llvm/Transforms/Instrumentation/InstrProfiling.h"
#include "llvm/Transforms/Instrumentation/KCFI.h"
#include "llvm/Transforms/Instrumentation/LowerAllowCheckPass.h"
#include "llvm/Transforms/Instrumentation/MemProfInstrumentation.h"
#include "llvm/Transforms/Instrumentation/MemProfUse.h"
#include "llvm/Transforms/Instrumentation/MemorySanitizer.h"
#include "llvm/Transforms/Instrumentation/NumericalStabilitySanitizer.h"
#include "llvm/Transforms/Instrumentation/PGOInstrumentation.h"
#include "llvm/Transforms/Instrumentation/RealtimeSanitizer.h"
#include "llvm/Transforms/Instrumentation/SanitizerBinaryMetadata.h"
#include "llvm/Transforms/Instrumentation/SanitizerCoverage.h"
#include "llvm/Transforms/Instrumentation/ThreadSanitizer.h"
#include "llvm/Transforms/Instrumentation/TypeSanitizer.h"
#include "llvm/Transforms/ObjCARC.h"
#include "llvm/Transforms/Scalar/EarlyCSE.h"
#include "llvm/Transforms/Scalar/GVN.h"
#include "llvm/Transforms/Scalar/JumpThreading.h"
#include "llvm/Transforms/Utils/Debugify.h"
#include "llvm/Transforms/Utils/ModuleUtils.h"
#include <limits>
#include <memory>
#include <optional>
#include "llvm/Support/Extension.def"

Go to the source code of this file.

Namespaces

namespace  llvm
 Diagnostic wrappers for TextAPI types for error reporting.
namespace  clang
 The JSON file list parser is used to communicate input to InstallAPI.

Macros

#define HANDLE_EXTENSION(Ext)
#define HANDLE_EXTENSION(Ext)

Functions

static cl::opt< boolllvm::ClSanitizeOnOptimizerEarlyEP ("sanitizer-early-opt-ep", cl::Optional, cl::desc("Insert sanitizers on OptimizerEarlyEP."))
static cl::opt< PGOOptions::ColdFuncOpt > llvm::ClPGOColdFuncAttr ("pgo-cold-func-opt", cl::init(PGOOptions::ColdFuncOpt::Default), cl::Hidden, cl::desc("Function attribute to apply to cold functions as determined by PGO"), cl::values(clEnumValN(PGOOptions::ColdFuncOpt::Default, "default", "Default (no attribute)"), clEnumValN(PGOOptions::ColdFuncOpt::OptSize, "optsize", "Mark cold functions with optsize."), clEnumValN(PGOOptions::ColdFuncOpt::MinSize, "minsize", "Mark cold functions with minsize."), clEnumValN(PGOOptions::ColdFuncOpt::OptNone, "optnone", "Mark cold functions with optnone.")))
static std::string getProfileGenName (const CodeGenOptions &CodeGenOpts)
static SanitizerCoverageOptions getSancovOptsFromCGOpts (const CodeGenOptions &CGOpts)
static SanitizerBinaryMetadataOptions getSanitizerBinaryMetadataOptions (const CodeGenOptions &CGOpts)
static bool asanUseGlobalsGC (const Triple &T, const CodeGenOptions &CGOpts)
static std::optional< llvm::CodeModel::Model > getCodeModel (const CodeGenOptions &CodeGenOpts)
static CodeGenFileType getCodeGenFileType (BackendAction Action)
static bool actionRequiresCodeGen (BackendAction Action)
static std::string flattenClangCommandLine (ArrayRef< std::string > Args, StringRef MainFilename)
static bool initTargetOptions (const CompilerInstance &CI, DiagnosticsEngine &Diags, llvm::TargetOptions &Options)
static std::optional< GCOVOptions > getGCOVOptions (const CodeGenOptions &CodeGenOpts, const LangOptions &LangOpts)
static std::optional< InstrProfOptions > getInstrProfOptions (const CodeGenOptions &CodeGenOpts, const LangOptions &LangOpts)
static void setCommandLineOpts (const CodeGenOptions &CodeGenOpts)
static OptimizationLevel mapToLevel (const CodeGenOptions &Opts)
static void addKCFIPass (const Triple &TargetTriple, const LangOptions &LangOpts, PassBuilder &PB)
static void addSanitizers (const Triple &TargetTriple, const CodeGenOptions &CodeGenOpts, const LangOptions &LangOpts, PassBuilder &PB)
static void runThinLTOBackend (CompilerInstance &CI, ModuleSummaryIndex *CombinedIndex, llvm::Module *M, std::unique_ptr< raw_pwrite_stream > OS, std::string SampleProfile, std::string ProfileRemapping, BackendAction Action)

Variables

LLVM_ABI cl::opt< InstrProfCorrelator::ProfCorrelatorKind > llvm::ProfileCorrelate
llvm::cl::opt< boolclang::ClSanitizeGuardChecks

Macro Definition Documentation

◆ HANDLE_EXTENSION [1/2]

#define HANDLE_EXTENSION ( Ext)
Value:
llvm::PassPluginLibraryInfo get##Ext##PluginInfo();

Definition at line 96 of file BackendUtil.cpp.

◆ HANDLE_EXTENSION [2/2]

#define HANDLE_EXTENSION ( Ext)
Value:
get##Ext##PluginInfo().RegisterPassBuilderCallbacks(PB);

Definition at line 96 of file BackendUtil.cpp.

Function Documentation

◆ actionRequiresCodeGen()

bool actionRequiresCodeGen ( BackendAction Action)
static

◆ addKCFIPass()

void addKCFIPass ( const Triple & TargetTriple,
const LangOptions & LangOpts,
PassBuilder & PB )
static

Definition at line 671 of file BackendUtil.cpp.

References clang::SanitizerSet::has(), and clang::LangOptions::Sanitize.

◆ addSanitizers()

◆ asanUseGlobalsGC()

bool asanUseGlobalsGC ( const Triple & T,
const CodeGenOptions & CGOpts )
static

Definition at line 272 of file BackendUtil.cpp.

References clang::T.

Referenced by addSanitizers().

◆ flattenClangCommandLine()

std::string flattenClangCommandLine ( ArrayRef< std::string > Args,
StringRef MainFilename )
static

Definition at line 326 of file BackendUtil.cpp.

References contains().

Referenced by initTargetOptions().

◆ getCodeGenFileType()

CodeGenFileType getCodeGenFileType ( BackendAction Action)
static

◆ getCodeModel()

std::optional< llvm::CodeModel::Model > getCodeModel ( const CodeGenOptions & CodeGenOpts)
static

Definition at line 295 of file BackendUtil.cpp.

References clang::CodeGenOptions::CodeModel.

Referenced by runThinLTOBackend().

◆ getGCOVOptions()

◆ getInstrProfOptions()

std::optional< InstrProfOptions > getInstrProfOptions ( const CodeGenOptions & CodeGenOpts,
const LangOptions & LangOpts )
static

◆ getProfileGenName()

std::string getProfileGenName ( const CodeGenOptions & CodeGenOpts)
static

Definition at line 129 of file BackendUtil.cpp.

References clang::FileName, and clang::CodeGenOptions::InstrProfileOutput.

Referenced by runThinLTOBackend().

◆ getSancovOptsFromCGOpts()

SanitizerCoverageOptions getSancovOptsFromCGOpts ( const CodeGenOptions & CGOpts)
static

Definition at line 235 of file BackendUtil.cpp.

Referenced by addSanitizers().

◆ getSanitizerBinaryMetadataOptions()

SanitizerBinaryMetadataOptions getSanitizerBinaryMetadataOptions ( const CodeGenOptions & CGOpts)
static

Definition at line 260 of file BackendUtil.cpp.

Referenced by addSanitizers().

◆ initTargetOptions()

◆ mapToLevel()

OptimizationLevel mapToLevel ( const CodeGenOptions & Opts)
static

Definition at line 640 of file BackendUtil.cpp.

◆ runThinLTOBackend()

void runThinLTOBackend ( CompilerInstance & CI,
ModuleSummaryIndex * CombinedIndex,
llvm::Module * M,
std::unique_ptr< raw_pwrite_stream > OS,
std::string SampleProfile,
std::string ProfileRemapping,
BackendAction Action )
static

◆ setCommandLineOpts()

void setCommandLineOpts ( const CodeGenOptions & CodeGenOpts)
static