diff options
author | David Blaikie <dblaikie@gmail.com> | 2017-04-19 20:08:21 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2017-04-19 20:08:21 +0000 |
commit | 6e2ec5f10ecca4db786cb5d2c3c4f1701a940385 (patch) | |
tree | 8197ed0a27b15525a1f4f9831edb5c8cea8b13da | |
parent | cfe5b2bf749287ff27e921c887bb4754ba9eb951 (diff) | |
download | bcm5719-llvm-6e2ec5f10ecca4db786cb5d2c3c4f1701a940385.tar.gz bcm5719-llvm-6e2ec5f10ecca4db786cb5d2c3c4f1701a940385.zip |
Parse backend options during thinlto backend compile actions
llvm-svn: 300741
-rw-r--r-- | clang/lib/CodeGen/BackendUtil.cpp | 11 | ||||
-rw-r--r-- | clang/test/CodeGen/thinlto-backend-option.ll | 13 |
2 files changed, 18 insertions, 6 deletions
diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index 855d6795b9d..3f957403fb2 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -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. diff --git a/clang/test/CodeGen/thinlto-backend-option.ll b/clang/test/CodeGen/thinlto-backend-option.ll new file mode 100644 index 00000000000..4c7c0ea3efc --- /dev/null +++ b/clang/test/CodeGen/thinlto-backend-option.ll @@ -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' |