forked from OSchip/llvm-project
[NFC][ThinLTO] Change command line passing to EmbedBitcodeInModule
Changing to pass by ref - less null checks to worry about. Differential Revision: https://reviews.llvm.org/D90330
This commit is contained in:
parent
bed8394047
commit
6fa35541a0
|
@ -1625,7 +1625,7 @@ static void runThinLTOBackend(
|
|||
if (Error E =
|
||||
thinBackend(Conf, -1, AddStream, *M, *CombinedIndex, ImportList,
|
||||
ModuleToDefinedGVSummaries[M->getModuleIdentifier()],
|
||||
ModuleMap, &CGOpts.CmdArgs)) {
|
||||
ModuleMap, CGOpts.CmdArgs)) {
|
||||
handleAllErrors(std::move(E), [&](ErrorInfoBase &EIB) {
|
||||
errs() << "Error running ThinLTO backend: " << EIB.message() << '\n';
|
||||
});
|
||||
|
@ -1709,5 +1709,5 @@ void clang::EmbedBitcode(llvm::Module *M, const CodeGenOptions &CGOpts,
|
|||
llvm::EmbedBitcodeInModule(
|
||||
*M, Buf, CGOpts.getEmbedBitcode() != CodeGenOptions::Embed_Marker,
|
||||
CGOpts.getEmbedBitcode() != CodeGenOptions::Embed_Bitcode,
|
||||
&CGOpts.CmdArgs);
|
||||
CGOpts.CmdArgs);
|
||||
}
|
||||
|
|
|
@ -152,14 +152,18 @@ class raw_ostream;
|
|||
const std::map<std::string, GVSummaryMapTy>
|
||||
*ModuleToSummariesForIndex = nullptr);
|
||||
|
||||
/// Save a copy of the llvm IR as data in the __LLVM,__bitcode section.
|
||||
/// If EmbedBitcode is set, save a copy of the llvm IR as data in the
|
||||
/// __LLVM,__bitcode section (.llvmbc on non-MacOS).
|
||||
/// If available, pass the serialized module via the Buf parameter. If not,
|
||||
/// pass an empty (default-initialized) MemoryBufferRef, and the serialization
|
||||
/// will be handled by this API. The same behavior happens if the provided Buf
|
||||
/// is not bitcode (i.e. if it's invalid data or even textual LLVM assembly).
|
||||
/// If EmbedMarker is set, the command line is also exported in
|
||||
/// the corresponding section (__LLVM,_cmdline / .llvmcmd) - even if CmdArgs
|
||||
/// were empty.
|
||||
void EmbedBitcodeInModule(Module &M, MemoryBufferRef Buf, bool EmbedBitcode,
|
||||
bool EmbedMarker,
|
||||
const std::vector<uint8_t> *CmdArgs);
|
||||
const std::vector<uint8_t> &CmdArgs);
|
||||
|
||||
} // end namespace llvm
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ Error thinBackend(const Config &C, unsigned Task, AddStreamFn AddStream,
|
|||
const FunctionImporter::ImportMapTy &ImportList,
|
||||
const GVSummaryMapTy &DefinedGlobals,
|
||||
MapVector<StringRef, BitcodeModule> &ModuleMap,
|
||||
const std::vector<uint8_t> *CmdArgs = nullptr);
|
||||
const std::vector<uint8_t> &CmdArgs = std::vector<uint8_t>());
|
||||
|
||||
Error finalizeOptimizationRemarks(
|
||||
std::unique_ptr<ToolOutputFile> DiagOutputFile);
|
||||
|
|
|
@ -4819,7 +4819,7 @@ static const char *getSectionNameForCommandline(const Triple &T) {
|
|||
|
||||
void llvm::EmbedBitcodeInModule(llvm::Module &M, llvm::MemoryBufferRef Buf,
|
||||
bool EmbedBitcode, bool EmbedMarker,
|
||||
const std::vector<uint8_t> *CmdArgs) {
|
||||
const std::vector<uint8_t> &CmdArgs) {
|
||||
// Save llvm.compiler.used and remove it.
|
||||
SmallVector<Constant *, 2> UsedArray;
|
||||
SmallPtrSet<GlobalValue *, 4> UsedGlobals;
|
||||
|
@ -4878,8 +4878,8 @@ void llvm::EmbedBitcodeInModule(llvm::Module &M, llvm::MemoryBufferRef Buf,
|
|||
// Skip if only bitcode needs to be embedded.
|
||||
if (EmbedMarker) {
|
||||
// Embed command-line options.
|
||||
ArrayRef<uint8_t> CmdData(const_cast<uint8_t *>(CmdArgs->data()),
|
||||
CmdArgs->size());
|
||||
ArrayRef<uint8_t> CmdData(const_cast<uint8_t *>(CmdArgs.data()),
|
||||
CmdArgs.size());
|
||||
llvm::Constant *CmdConstant =
|
||||
llvm::ConstantDataArray::get(M.getContext(), CmdData);
|
||||
GV = new llvm::GlobalVariable(M, CmdConstant->getType(), true,
|
||||
|
|
|
@ -358,7 +358,7 @@ static void runOldPMPasses(const Config &Conf, Module &Mod, TargetMachine *TM,
|
|||
bool opt(const Config &Conf, TargetMachine *TM, unsigned Task, Module &Mod,
|
||||
bool IsThinLTO, ModuleSummaryIndex *ExportSummary,
|
||||
const ModuleSummaryIndex *ImportSummary,
|
||||
const std::vector<uint8_t> *CmdArgs = nullptr) {
|
||||
const std::vector<uint8_t> &CmdArgs) {
|
||||
if (EmbedBitcode == LTOBitcodeEmbedding::EmbedPostMergePreOptimized) {
|
||||
// FIXME: the motivation for capturing post-merge bitcode and command line
|
||||
// is replicating the compilation environment from bitcode, without needing
|
||||
|
@ -368,13 +368,14 @@ bool opt(const Config &Conf, TargetMachine *TM, unsigned Task, Module &Mod,
|
|||
// It's not very clear how the above motivation would map in the
|
||||
// linker-based case, so we currently don't plumb the command line args in
|
||||
// that case.
|
||||
if (CmdArgs == nullptr)
|
||||
if (CmdArgs.empty())
|
||||
LLVM_DEBUG(
|
||||
dbgs() << "Post-(Thin)LTO merge bitcode embedding was requested, but "
|
||||
"command line arguments are not available");
|
||||
llvm::EmbedBitcodeInModule(Mod, llvm::MemoryBufferRef(),
|
||||
/*EmbedBitcode*/ true,
|
||||
/*EmbedMarker*/ false, CmdArgs);
|
||||
/*EmbedMarker*/ false,
|
||||
/*Cmdline*/ CmdArgs);
|
||||
}
|
||||
// FIXME: Plumb the combined index into the new pass manager.
|
||||
if (!Conf.OptPipeline.empty())
|
||||
|
@ -397,7 +398,8 @@ void codegen(const Config &Conf, TargetMachine *TM, AddStreamFn AddStream,
|
|||
if (EmbedBitcode == LTOBitcodeEmbedding::EmbedOptimized)
|
||||
llvm::EmbedBitcodeInModule(Mod, llvm::MemoryBufferRef(),
|
||||
/*EmbedBitcode*/ true,
|
||||
/*EmbedMarker*/ false, /*CmdArgs*/ nullptr);
|
||||
/*EmbedMarker*/ false,
|
||||
/*CmdArgs*/ std::vector<uint8_t>());
|
||||
|
||||
std::unique_ptr<ToolOutputFile> DwoOut;
|
||||
SmallString<1024> DwoFile(Conf.SplitDwarfOutput);
|
||||
|
@ -522,7 +524,8 @@ Error lto::backend(const Config &C, AddStreamFn AddStream,
|
|||
|
||||
if (!C.CodeGenOnly) {
|
||||
if (!opt(C, TM.get(), 0, *Mod, /*IsThinLTO=*/false,
|
||||
/*ExportSummary=*/&CombinedIndex, /*ImportSummary=*/nullptr))
|
||||
/*ExportSummary=*/&CombinedIndex, /*ImportSummary=*/nullptr,
|
||||
/*CmdArgs*/ std::vector<uint8_t>()))
|
||||
return Error::success();
|
||||
}
|
||||
|
||||
|
@ -561,7 +564,7 @@ Error lto::thinBackend(const Config &Conf, unsigned Task, AddStreamFn AddStream,
|
|||
const FunctionImporter::ImportMapTy &ImportList,
|
||||
const GVSummaryMapTy &DefinedGlobals,
|
||||
MapVector<StringRef, BitcodeModule> &ModuleMap,
|
||||
const std::vector<uint8_t> *CmdArgs) {
|
||||
const std::vector<uint8_t> &CmdArgs) {
|
||||
Expected<const Target *> TOrErr = initAndLookupTarget(Conf, Mod);
|
||||
if (!TOrErr)
|
||||
return TOrErr.takeError();
|
||||
|
|
Loading…
Reference in New Issue