clang 24.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/DiagnosticFrontend.h"
#include "clang/Basic/LangOptions.h"
#include "clang/Basic/TargetOptions.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/RuntimeLibcallInfo.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/BinaryFormat/ELF.h"
#include "llvm/Bitcode/BitcodeReader.h"
#include "llvm/Bitcode/BitcodeWriter.h"
#include "llvm/Bitcode/BitcodeWriterPass.h"
#include "llvm/CodeGen/MachineModuleInfo.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/LLVMRemarkStreamer.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/StandardInstrumentations.h"
#include "llvm/Plugins/PassPlugin.h"
#include "llvm/ProfileData/InstrProfCorrelator.h"
#include "llvm/Support/BuryPointer.h"
#include "llvm/Support/CodeGen.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/IOSandbox.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/InferFunctionAttrs.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/AssignGUID.h"
#include "llvm/Transforms/Utils/Debugify.h"
#include "llvm/Transforms/Utils/DynamicDebugging.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
 Top level wrappers for InstallAPI frontend operations.

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, ArrayRef< StringRef > InputFiles)
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, vfs::FileSystem &VFS)
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)
void addLowerAllowCheckPass (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)
static void createAndEmbedModuleForDynamicDebugging (CompilerInstance &CI, CodeGenOptions &CGOpts, llvm::Module *M, IntrusiveRefCntPtr< llvm::vfs::FileSystem > VFS, BackendConsumer *BC)

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 105 of file BackendUtil.cpp.

◆ HANDLE_EXTENSION [2/2]

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

Definition at line 105 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 658 of file BackendUtil.cpp.

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

◆ addLowerAllowCheckPass()

◆ addSanitizers()

◆ asanUseGlobalsGC()

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

Definition at line 285 of file BackendUtil.cpp.

References clang::T.

Referenced by addSanitizers().

◆ createAndEmbedModuleForDynamicDebugging()

void createAndEmbedModuleForDynamicDebugging ( CompilerInstance & CI,
CodeGenOptions & CGOpts,
llvm::Module * M,
IntrusiveRefCntPtr< llvm::vfs::FileSystem > VFS,
BackendConsumer * BC )
static

Helper for saving the module(s) at various dyndbg stages.

Definition at line 1489 of file BackendUtil.cpp.

References clang::Backend_EmitObj, clang::C, clang::CodeGenOptions::CmdArgs, and clang::CodeGenOptions::SaveDynDbgTempsFilePrefix.

Referenced by clang::emitBackendOutput().

◆ flattenClangCommandLine()

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

Definition at line 339 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 308 of file BackendUtil.cpp.

References clang::CodeGenOptions::CodeModel, and clang::Default.

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 138 of file BackendUtil.cpp.

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

Referenced by runThinLTOBackend().

◆ getSancovOptsFromCGOpts()

SanitizerCoverageOptions getSancovOptsFromCGOpts ( const CodeGenOptions & CGOpts)
static

Definition at line 247 of file BackendUtil.cpp.

Referenced by addSanitizers().

◆ getSanitizerBinaryMetadataOptions()

SanitizerBinaryMetadataOptions getSanitizerBinaryMetadataOptions ( const CodeGenOptions & CGOpts)
static

Definition at line 273 of file BackendUtil.cpp.

Referenced by addSanitizers().

◆ initTargetOptions()

bool initTargetOptions ( const CompilerInstance & CI,
DiagnosticsEngine & Diags,
llvm::TargetOptions & Options )
static

◆ mapToLevel()

OptimizationLevel mapToLevel ( const CodeGenOptions & Opts)
static

Definition at line 639 of file BackendUtil.cpp.

◆ runThinLTOBackend()

◆ setCommandLineOpts()

void setCommandLineOpts ( const CodeGenOptions & CodeGenOpts,
vfs::FileSystem & VFS )
static