forked from OSchip/llvm-project
Parse backend options during thinlto backend compile actions
llvm-svn: 300741
This commit is contained in:
parent
cfe5b2bf74
commit
6e2ec5f10e
|
@ -83,9 +83,6 @@ class EmitAssemblyHelper {
|
|||
return TargetIRAnalysis();
|
||||
}
|
||||
|
||||
/// Set LLVM command line options passed through -backend-option.
|
||||
void setCommandLineOpts();
|
||||
|
||||
void CreatePasses(legacy::PassManager &MPM, legacy::FunctionPassManager &FPM);
|
||||
|
||||
/// Generates the TargetMachine.
|
||||
|
@ -604,7 +601,7 @@ void EmitAssemblyHelper::CreatePasses(legacy::PassManager &MPM,
|
|||
PMBuilder.populateModulePassManager(MPM);
|
||||
}
|
||||
|
||||
void EmitAssemblyHelper::setCommandLineOpts() {
|
||||
static void setCommandLineOpts(const CodeGenOptions &CodeGenOpts) {
|
||||
SmallVector<const char *, 16> BackendArgs;
|
||||
BackendArgs.push_back("clang"); // Fake program name.
|
||||
if (!CodeGenOpts.DebugPass.empty()) {
|
||||
|
@ -677,7 +674,7 @@ void EmitAssemblyHelper::EmitAssembly(BackendAction Action,
|
|||
std::unique_ptr<raw_pwrite_stream> OS) {
|
||||
TimeRegion Region(llvm::TimePassesIsEnabled ? &CodeGenerationTime : nullptr);
|
||||
|
||||
setCommandLineOpts();
|
||||
setCommandLineOpts(CodeGenOpts);
|
||||
|
||||
bool UsesCodeGen = (Action != Backend_EmitNothing &&
|
||||
Action != Backend_EmitBC &&
|
||||
|
@ -806,7 +803,7 @@ static PassBuilder::OptimizationLevel mapToLevel(const CodeGenOptions &Opts) {
|
|||
void EmitAssemblyHelper::EmitAssemblyWithNewPassManager(
|
||||
BackendAction Action, std::unique_ptr<raw_pwrite_stream> OS) {
|
||||
TimeRegion Region(llvm::TimePassesIsEnabled ? &CodeGenerationTime : nullptr);
|
||||
setCommandLineOpts();
|
||||
setCommandLineOpts(CodeGenOpts);
|
||||
|
||||
// The new pass manager always makes a target machine available to passes
|
||||
// during construction.
|
||||
|
@ -944,6 +941,8 @@ static void runThinLTOBackend(ModuleSummaryIndex *CombinedIndex, Module *M,
|
|||
ModuleToDefinedGVSummaries;
|
||||
CombinedIndex->collectDefinedGVSummariesPerModule(ModuleToDefinedGVSummaries);
|
||||
|
||||
setCommandLineOpts(CGOpts);
|
||||
|
||||
// We can simply import the values mentioned in the combined index, since
|
||||
// we should only invoke this using the individual indexes written out
|
||||
// via a WriteIndexesThinBackend.
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
; Test to ensure -backend-options work when invoking the ThinLTO backend path.
|
||||
|
||||
; This test uses a non-existent backend option to test that backend options are
|
||||
; being parsed. While it's more important that the existing options are parsed
|
||||
; than that this error is produced, this provides a reliable way to test this
|
||||
; scenario independent of any particular backend options that may exist now or
|
||||
; in the future.
|
||||
|
||||
; RUN: %clang -flto=thin -c -o %t.o %s
|
||||
; RUN: llvm-lto -thinlto -o %t %t.o
|
||||
; RUN: not %clang_cc1 -x ir %t.o -fthinlto-index=%t.thinlto.bc -backend-option -nonexistent -emit-obj -o /dev/null 2>&1 | FileCheck %s
|
||||
|
||||
; CHECK: clang: Unknown command line argument '-nonexistent'
|
Loading…
Reference in New Issue