[cfe-commits] r153441 - /cfe/trunk/lib/Frontend/CompilerInvocation.cpp
David Blaikie
dblaikie at gmail.com
Mon Mar 26 08:47:54 PDT 2012
On Mon, Mar 26, 2012 at 8:39 AM, Benjamin Kramer
<benny.kra at googlemail.com> wrote:
> Author: d0k
> Date: Mon Mar 26 10:39:31 2012
> New Revision: 153441
>
> URL: http://llvm.org/viewvc/llvm-project?rev=153441&view=rev
> Log:
> Driver: Factor string vector push_back into a helper class and optimize it.
>
> Due to lack of move semantics we would create a temporary std::string from the
> string literal, copy it into the vector and discard the temporary. This leads
> to massive code bloat, optimizing it saves 50k on i386-linux-Release+Asserts.
>
> While there add a two-element overload for push_back, simplifying code a bit.
>
> Modified:
> cfe/trunk/lib/Frontend/CompilerInvocation.cpp
>
> Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=153441&r1=153440&r2=153441&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
> +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Mon Mar 26 10:39:31 2012
> @@ -110,38 +110,48 @@
> // Serialization (to args)
> //===----------------------------------------------------------------------===//
>
> -static void AnalyzerOptsToArgs(const AnalyzerOptions &Opts,
> - std::vector<std::string> &Res) {
> +namespace {
> + /// ToArgsList - Helper class to create a list of std::strings.
> + class ToArgsList {
> + std::vector<std::string> &Res;
> + public:
> + explicit ToArgsList(std::vector<std::string> &Res) : Res(Res) {}
> +
> + void push_back(StringRef Str) {
> + // Avoid creating a temporary string.
> + Res.push_back(std::string());
Did you consider whether this is better than Res.resize(Res.size() +
1); ? (perhaps it is, since std::string's default ctor & empty copy
should be really cheap, but just a thought)
> + Res.back().assign(Str.data(), Str.size());
> + }
> +
> + void push_back(StringRef Str1, StringRef Str2) {
> + push_back(Str1);
> + push_back(Str2);
> + }
> + };
> +}
> +
> +static void AnalyzerOptsToArgs(const AnalyzerOptions &Opts, ToArgsList &Res) {
> if (Opts.ShowCheckerHelp)
> Res.push_back("-analyzer-checker-help");
> - if (Opts.AnalysisStoreOpt != RegionStoreModel) {
> - Res.push_back("-analyzer-store");
> - Res.push_back(getAnalysisStoreName(Opts.AnalysisStoreOpt));
> - }
> - if (Opts.AnalysisConstraintsOpt != RangeConstraintsModel) {
> - Res.push_back("-analyzer-constraints");
> - Res.push_back(getAnalysisConstraintName(Opts.AnalysisConstraintsOpt));
> - }
> - if (Opts.AnalysisDiagOpt != PD_HTML) {
> - Res.push_back("-analyzer-output");
> - Res.push_back(getAnalysisDiagClientName(Opts.AnalysisDiagOpt));
> - }
> - if (Opts.AnalysisPurgeOpt != PurgeStmt) {
> - Res.push_back("-analyzer-purge");
> - Res.push_back(getAnalysisPurgeModeName(Opts.AnalysisPurgeOpt));
> - }
> - if (!Opts.AnalyzeSpecificFunction.empty()) {
> - Res.push_back("-analyze-function");
> - Res.push_back(Opts.AnalyzeSpecificFunction);
> - }
> - if (Opts.IPAMode != Inlining) {
> - Res.push_back("-analyzer-ipa");
> - Res.push_back(getAnalysisIPAModeName(Opts.IPAMode));
> - }
> - if (Opts.InliningMode != NoRedundancy) {
> - Res.push_back("-analyzer-inlining-mode");
> - Res.push_back(getAnalysisInliningModeName(Opts.InliningMode));
> - }
> + if (Opts.AnalysisStoreOpt != RegionStoreModel)
> + Res.push_back("-analyzer-store",
> + getAnalysisStoreName(Opts.AnalysisStoreOpt));
> + if (Opts.AnalysisConstraintsOpt != RangeConstraintsModel)
> + Res.push_back("-analyzer-constraints",
> + getAnalysisConstraintName(Opts.AnalysisConstraintsOpt));
> + if (Opts.AnalysisDiagOpt != PD_HTML)
> + Res.push_back("-analyzer-output",
> + getAnalysisDiagClientName(Opts.AnalysisDiagOpt));
> + if (Opts.AnalysisPurgeOpt != PurgeStmt)
> + Res.push_back("-analyzer-purge",
> + getAnalysisPurgeModeName(Opts.AnalysisPurgeOpt));
> + if (!Opts.AnalyzeSpecificFunction.empty())
> + Res.push_back("-analyze-function", Opts.AnalyzeSpecificFunction);
> + if (Opts.IPAMode != Inlining)
> + Res.push_back("-analyzer-ipa", getAnalysisIPAModeName(Opts.IPAMode));
> + if (Opts.InliningMode != NoRedundancy)
> + Res.push_back("-analyzer-inlining-mode",
> + getAnalysisInliningModeName(Opts.InliningMode));
>
> if (Opts.AnalyzeAll)
> Res.push_back("-analyzer-opt-analyze-headers");
> @@ -168,8 +178,7 @@
> }
> }
>
> -static void CodeGenOptsToArgs(const CodeGenOptions &Opts,
> - std::vector<std::string> &Res) {
> +static void CodeGenOptsToArgs(const CodeGenOptions &Opts, ToArgsList &Res) {
> if (Opts.DebugInfo)
> Res.push_back("-g");
> if (Opts.DisableLLVMOpts)
> @@ -178,14 +187,10 @@
> Res.push_back("-disable-red-zone");
> if (Opts.DisableTailCalls)
> Res.push_back("-mdisable-tail-calls");
> - if (!Opts.DebugCompilationDir.empty()) {
> - Res.push_back("-fdebug-compilation-dir");
> - Res.push_back(Opts.DebugCompilationDir);
> - }
> - if (!Opts.DwarfDebugFlags.empty()) {
> - Res.push_back("-dwarf-debug-flags");
> - Res.push_back(Opts.DwarfDebugFlags);
> - }
> + if (!Opts.DebugCompilationDir.empty())
> + Res.push_back("-fdebug-compilation-dir", Opts.DebugCompilationDir);
> + if (!Opts.DwarfDebugFlags.empty())
> + Res.push_back("-dwarf-debug-flags", Opts.DwarfDebugFlags);
> if (Opts.ObjCRuntimeHasARC)
> Res.push_back("-fobjc-runtime-has-arc");
> if (Opts.ObjCRuntimeHasTerminate)
> @@ -211,10 +216,8 @@
> Opts.OptimizeSize == 1 ? Res.push_back("-Os") : Res.push_back("-Oz");
> } else if (Opts.OptimizationLevel != 0)
> Res.push_back("-O" + llvm::utostr(Opts.OptimizationLevel));
> - if (!Opts.MainFileName.empty()) {
> - Res.push_back("-main-file-name");
> - Res.push_back(Opts.MainFileName);
> - }
> + if (!Opts.MainFileName.empty())
> + Res.push_back("-main-file-name", Opts.MainFileName);
> if (Opts.NoInfsFPMath)
> Res.push_back("-menable-no-infinities");
> if (Opts.NoNaNsFPMath)
> @@ -234,10 +237,8 @@
> Res.push_back("-ffunction-sections");
> if (Opts.AsmVerbose)
> Res.push_back("-masm-verbose");
> - if (!Opts.CodeModel.empty()) {
> - Res.push_back("-mcode-model");
> - Res.push_back(Opts.CodeModel);
> - }
> + if (!Opts.CodeModel.empty())
> + Res.push_back("-mcode-model", Opts.CodeModel);
> if (Opts.CUDAIsDevice)
> Res.push_back("-fcuda-is-device");
> if (!Opts.CXAAtExit)
> @@ -247,19 +248,14 @@
> if (Opts.ObjCAutoRefCountExceptions)
> Res.push_back("-fobjc-arc-eh");
> if (!Opts.DebugPass.empty()) {
> - Res.push_back("-mdebug-pass");
> - Res.push_back(Opts.DebugPass);
> + Res.push_back("-mdebug-pass", Opts.DebugPass);
> }
> if (Opts.DisableFPElim)
> Res.push_back("-mdisable-fp-elim");
> - if (!Opts.FloatABI.empty()) {
> - Res.push_back("-mfloat-abi");
> - Res.push_back(Opts.FloatABI);
> - }
> - if (!Opts.LimitFloatPrecision.empty()) {
> - Res.push_back("-mlimit-float-precision");
> - Res.push_back(Opts.LimitFloatPrecision);
> - }
> + if (!Opts.FloatABI.empty())
> + Res.push_back("-mfloat-abi", Opts.FloatABI);
> + if (!Opts.LimitFloatPrecision.empty())
> + Res.push_back("-mlimit-float-precision", Opts.LimitFloatPrecision);
> if (Opts.NoZeroInitializedInBSS)
> Res.push_back("-mno-zero-initialized-bss");
> switch (Opts.getObjCDispatchMethod()) {
> @@ -272,10 +268,8 @@
> Res.push_back("-fobjc-dispatch-method=non-legacy");
> break;
> }
> - if (Opts.NumRegisterParameters) {
> - Res.push_back("-mregparm");
> - Res.push_back(llvm::utostr(Opts.NumRegisterParameters));
> - }
> + if (Opts.NumRegisterParameters)
> + Res.push_back("-mregparm", llvm::utostr(Opts.NumRegisterParameters));
> if (Opts.NoGlobalMerge)
> Res.push_back("-mno-global-merge");
> if (Opts.NoExecStack)
> @@ -292,42 +286,32 @@
> Res.push_back("-msoft-float");
> if (Opts.UnwindTables)
> Res.push_back("-munwind-tables");
> - if (Opts.RelocationModel != "pic") {
> - Res.push_back("-mrelocation-model");
> - Res.push_back(Opts.RelocationModel);
> - }
> + if (Opts.RelocationModel != "pic")
> + Res.push_back("-mrelocation-model", Opts.RelocationModel);
> if (!Opts.VerifyModule)
> Res.push_back("-disable-llvm-verifier");
> - for (unsigned i = 0, e = Opts.BackendOptions.size(); i != e; ++i) {
> - Res.push_back("-backend-option");
> - Res.push_back(Opts.BackendOptions[i]);
> - }
> + for (unsigned i = 0, e = Opts.BackendOptions.size(); i != e; ++i)
> + Res.push_back("-backend-option", Opts.BackendOptions[i]);
> }
>
> static void DependencyOutputOptsToArgs(const DependencyOutputOptions &Opts,
> - std::vector<std::string> &Res) {
> + ToArgsList &Res) {
> if (Opts.IncludeSystemHeaders)
> Res.push_back("-sys-header-deps");
> if (Opts.ShowHeaderIncludes)
> Res.push_back("-H");
> - if (!Opts.HeaderIncludeOutputFile.empty()) {
> - Res.push_back("-header-include-file");
> - Res.push_back(Opts.HeaderIncludeOutputFile);
> - }
> + if (!Opts.HeaderIncludeOutputFile.empty())
> + Res.push_back("-header-include-file", Opts.HeaderIncludeOutputFile);
> if (Opts.UsePhonyTargets)
> Res.push_back("-MP");
> - if (!Opts.OutputFile.empty()) {
> - Res.push_back("-dependency-file");
> - Res.push_back(Opts.OutputFile);
> - }
> - for (unsigned i = 0, e = Opts.Targets.size(); i != e; ++i) {
> - Res.push_back("-MT");
> - Res.push_back(Opts.Targets[i]);
> - }
> + if (!Opts.OutputFile.empty())
> + Res.push_back("-dependency-file", Opts.OutputFile);
> + for (unsigned i = 0, e = Opts.Targets.size(); i != e; ++i)
> + Res.push_back("-MT", Opts.Targets[i]);
> }
>
> static void DiagnosticOptsToArgs(const DiagnosticOptions &Opts,
> - std::vector<std::string> &Res) {
> + ToArgsList &Res) {
> if (Opts.IgnoreWarnings)
> Res.push_back("-w");
> if (Opts.NoRewriteMacros)
> @@ -366,42 +350,29 @@
> case DiagnosticOptions::Vi:
> Res.push_back("-fdiagnostics-format=vi"); break;
> }
> - if (Opts.ErrorLimit) {
> - Res.push_back("-ferror-limit");
> - Res.push_back(llvm::utostr(Opts.ErrorLimit));
> - }
> - if (!Opts.DiagnosticLogFile.empty()) {
> - Res.push_back("-diagnostic-log-file");
> - Res.push_back(Opts.DiagnosticLogFile);
> - }
> + if (Opts.ErrorLimit)
> + Res.push_back("-ferror-limit", llvm::utostr(Opts.ErrorLimit));
> + if (!Opts.DiagnosticLogFile.empty())
> + Res.push_back("-diagnostic-log-file", Opts.DiagnosticLogFile);
> if (Opts.MacroBacktraceLimit
> - != DiagnosticOptions::DefaultMacroBacktraceLimit) {
> - Res.push_back("-fmacro-backtrace-limit");
> - Res.push_back(llvm::utostr(Opts.MacroBacktraceLimit));
> - }
> + != DiagnosticOptions::DefaultMacroBacktraceLimit)
> + Res.push_back("-fmacro-backtrace-limit",
> + llvm::utostr(Opts.MacroBacktraceLimit));
> if (Opts.TemplateBacktraceLimit
> - != DiagnosticOptions::DefaultTemplateBacktraceLimit) {
> - Res.push_back("-ftemplate-backtrace-limit");
> - Res.push_back(llvm::utostr(Opts.TemplateBacktraceLimit));
> - }
> + != DiagnosticOptions::DefaultTemplateBacktraceLimit)
> + Res.push_back("-ftemplate-backtrace-limit",
> + llvm::utostr(Opts.TemplateBacktraceLimit));
> if (Opts.ConstexprBacktraceLimit
> - != DiagnosticOptions::DefaultConstexprBacktraceLimit) {
> - Res.push_back("-fconstexpr-backtrace-limit");
> - Res.push_back(llvm::utostr(Opts.ConstexprBacktraceLimit));
> - }
> -
> - if (Opts.TabStop != DiagnosticOptions::DefaultTabStop) {
> - Res.push_back("-ftabstop");
> - Res.push_back(llvm::utostr(Opts.TabStop));
> - }
> - if (Opts.MessageLength) {
> - Res.push_back("-fmessage-length");
> - Res.push_back(llvm::utostr(Opts.MessageLength));
> - }
> - if (!Opts.DumpBuildInformation.empty()) {
> - Res.push_back("-dump-build-information");
> - Res.push_back(Opts.DumpBuildInformation);
> - }
> + != DiagnosticOptions::DefaultConstexprBacktraceLimit)
> + Res.push_back("-fconstexpr-backtrace-limit",
> + llvm::utostr(Opts.ConstexprBacktraceLimit));
> +
> + if (Opts.TabStop != DiagnosticOptions::DefaultTabStop)
> + Res.push_back("-ftabstop", llvm::utostr(Opts.TabStop));
> + if (Opts.MessageLength)
> + Res.push_back("-fmessage-length", llvm::utostr(Opts.MessageLength));
> + if (!Opts.DumpBuildInformation.empty())
> + Res.push_back("-dump-build-information", Opts.DumpBuildInformation);
> for (unsigned i = 0, e = Opts.Warnings.size(); i != e; ++i)
> Res.push_back("-W" + Opts.Warnings[i]);
> }
> @@ -465,16 +436,12 @@
> llvm_unreachable("Unexpected language kind!");
> }
>
> -static void FileSystemOptsToArgs(const FileSystemOptions &Opts,
> - std::vector<std::string> &Res) {
> - if (!Opts.WorkingDir.empty()) {
> - Res.push_back("-working-directory");
> - Res.push_back(Opts.WorkingDir);
> - }
> +static void FileSystemOptsToArgs(const FileSystemOptions &Opts, ToArgsList &Res){
> + if (!Opts.WorkingDir.empty())
> + Res.push_back("-working-directory", Opts.WorkingDir);
> }
>
> -static void FrontendOptsToArgs(const FrontendOptions &Opts,
> - std::vector<std::string> &Res) {
> +static void FrontendOptsToArgs(const FrontendOptions &Opts, ToArgsList &Res) {
> if (Opts.DisableFree)
> Res.push_back("-disable-free");
> if (Opts.RelocatablePCH)
> @@ -514,14 +481,10 @@
> Res.push_back("-arcmt-migrate");
> break;
> }
> - if (!Opts.MTMigrateDir.empty()) {
> - Res.push_back("-mt-migrate-directory");
> - Res.push_back(Opts.MTMigrateDir);
> - }
> - if (!Opts.ARCMTMigrateReportOut.empty()) {
> - Res.push_back("-arcmt-migrate-report-output");
> - Res.push_back(Opts.ARCMTMigrateReportOut);
> - }
> + if (!Opts.MTMigrateDir.empty())
> + Res.push_back("-mt-migrate-directory", Opts.MTMigrateDir);
> + if (!Opts.ARCMTMigrateReportOut.empty())
> + Res.push_back("-arcmt-migrate-report-output", Opts.ARCMTMigrateReportOut);
> if (Opts.ARCMTMigrateEmitARCErrors)
> Res.push_back("-arcmt-migrate-emit-errors");
>
> @@ -535,62 +498,46 @@
> if (FrontendOptions::getInputKindForExtension(Opts.Inputs[i].File) !=
> Opts.Inputs[i].Kind)
> NeedLang = true;
> - if (NeedLang) {
> - Res.push_back("-x");
> - Res.push_back(getInputKindName(Opts.Inputs[0].Kind));
> - }
> + if (NeedLang)
> + Res.push_back("-x", getInputKindName(Opts.Inputs[0].Kind));
> for (unsigned i = 0, e = Opts.Inputs.size(); i != e; ++i) {
> assert((!NeedLang || Opts.Inputs[i].Kind == Opts.Inputs[0].Kind) &&
> "Unable to represent this input vector!");
> Res.push_back(Opts.Inputs[i].File);
> }
>
> - if (!Opts.OutputFile.empty()) {
> - Res.push_back("-o");
> - Res.push_back(Opts.OutputFile);
> - }
> - if (!Opts.CodeCompletionAt.FileName.empty()) {
> - Res.push_back("-code-completion-at");
> - Res.push_back(Opts.CodeCompletionAt.FileName + ":" +
> + if (!Opts.OutputFile.empty())
> + Res.push_back("-o", Opts.OutputFile);
> + if (!Opts.CodeCompletionAt.FileName.empty())
> + Res.push_back("-code-completion-at",
> + Opts.CodeCompletionAt.FileName + ":" +
> llvm::utostr(Opts.CodeCompletionAt.Line) + ":" +
> llvm::utostr(Opts.CodeCompletionAt.Column));
> - }
> if (Opts.ProgramAction != frontend::PluginAction)
> Res.push_back(getActionName(Opts.ProgramAction));
> if (!Opts.ActionName.empty()) {
> - Res.push_back("-plugin");
> - Res.push_back(Opts.ActionName);
> - for(unsigned i = 0, e = Opts.PluginArgs.size(); i != e; ++i) {
> - Res.push_back("-plugin-arg-" + Opts.ActionName);
> - Res.push_back(Opts.PluginArgs[i]);
> - }
> - }
> - for (unsigned i = 0, e = Opts.Plugins.size(); i != e; ++i) {
> - Res.push_back("-load");
> - Res.push_back(Opts.Plugins[i]);
> + Res.push_back("-plugin", Opts.ActionName);
> + for(unsigned i = 0, e = Opts.PluginArgs.size(); i != e; ++i)
> + Res.push_back("-plugin-arg-" + Opts.ActionName, Opts.PluginArgs[i]);
> }
> + for (unsigned i = 0, e = Opts.Plugins.size(); i != e; ++i)
> + Res.push_back("-load", Opts.Plugins[i]);
> for (unsigned i = 0, e = Opts.AddPluginActions.size(); i != e; ++i) {
> - Res.push_back("-add-plugin");
> - Res.push_back(Opts.AddPluginActions[i]);
> - for(unsigned ai = 0, ae = Opts.AddPluginArgs.size(); ai != ae; ++ai) {
> - Res.push_back("-plugin-arg-" + Opts.AddPluginActions[i]);
> - Res.push_back(Opts.AddPluginArgs[i][ai]);
> - }
> - }
> - for (unsigned i = 0, e = Opts.ASTMergeFiles.size(); i != e; ++i) {
> - Res.push_back("-ast-merge");
> - Res.push_back(Opts.ASTMergeFiles[i]);
> - }
> - for (unsigned i = 0, e = Opts.LLVMArgs.size(); i != e; ++i) {
> - Res.push_back("-mllvm");
> - Res.push_back(Opts.LLVMArgs[i]);
> - }
> + Res.push_back("-add-plugin", Opts.AddPluginActions[i]);
> + for(unsigned ai = 0, ae = Opts.AddPluginArgs.size(); ai != ae; ++ai)
> + Res.push_back("-plugin-arg-" + Opts.AddPluginActions[i],
> + Opts.AddPluginArgs[i][ai]);
> + }
> + for (unsigned i = 0, e = Opts.ASTMergeFiles.size(); i != e; ++i)
> + Res.push_back("-ast-merge", Opts.ASTMergeFiles[i]);
> + for (unsigned i = 0, e = Opts.LLVMArgs.size(); i != e; ++i)
> + Res.push_back("-mllvm", Opts.LLVMArgs[i]);
> if (!Opts.OverrideRecordLayoutsFile.empty())
> Res.push_back("-foverride-record-layout=" + Opts.OverrideRecordLayoutsFile);
> }
>
> static void HeaderSearchOptsToArgs(const HeaderSearchOptions &Opts,
> - std::vector<std::string> &Res) {
> + ToArgsList &Res) {
> if (Opts.Sysroot != "/") {
> Res.push_back("-isysroot");
> Res.push_back(Opts.Sysroot);
> @@ -657,14 +604,10 @@
> Res.push_back(E.Path);
> }
>
> - if (!Opts.ResourceDir.empty()) {
> - Res.push_back("-resource-dir");
> - Res.push_back(Opts.ResourceDir);
> - }
> - if (!Opts.ModuleCachePath.empty()) {
> - Res.push_back("-fmodule-cache-path");
> - Res.push_back(Opts.ModuleCachePath);
> - }
> + if (!Opts.ResourceDir.empty())
> + Res.push_back("-resource-dir", Opts.ResourceDir);
> + if (!Opts.ModuleCachePath.empty())
> + Res.push_back("-fmodule-cache-path", Opts.ModuleCachePath);
> if (!Opts.UseStandardSystemIncludes)
> Res.push_back("-nostdsysteminc");
> if (!Opts.UseStandardCXXIncludes)
> @@ -675,8 +618,7 @@
> Res.push_back("-v");
> }
>
> -static void LangOptsToArgs(const LangOptions &Opts,
> - std::vector<std::string> &Res) {
> +static void LangOptsToArgs(const LangOptions &Opts, ToArgsList &Res) {
> LangOptions DefaultLangOpts;
>
> // FIXME: Need to set -std to get all the implicit options.
> @@ -771,10 +713,8 @@
> case LangOptions::SOB_Defined: Res.push_back("-fwrapv"); break;
> case LangOptions::SOB_Trapping:
> Res.push_back("-ftrapv");
> - if (!Opts.OverflowHandler.empty()) {
> - Res.push_back("-ftrapv-handler");
> - Res.push_back(Opts.OverflowHandler);
> - }
> + if (!Opts.OverflowHandler.empty())
> + Res.push_back("-ftrapv-handler", Opts.OverflowHandler);
> break;
> }
> if (Opts.HeinousExtensions)
> @@ -793,10 +733,8 @@
> Res.push_back("-fdump-vtable-layouts");
> if (Opts.NoBitFieldTypeAlign)
> Res.push_back("-fno-bitfield-type-alignment");
> - if (Opts.PICLevel) {
> - Res.push_back("-pic-level");
> - Res.push_back(llvm::utostr(Opts.PICLevel));
> - }
> + if (Opts.PICLevel)
> + Res.push_back("-pic-level", llvm::utostr(Opts.PICLevel));
> if (Opts.ObjCGCBitmapPrint)
> Res.push_back("-print-ivar-layout");
> if (Opts.NoConstantCFStrings)
> @@ -840,22 +778,14 @@
> if (Opts.InlineVisibilityHidden)
> Res.push_back("-fvisibility-inlines-hidden");
>
> - if (Opts.getStackProtector() != 0) {
> - Res.push_back("-stack-protector");
> - Res.push_back(llvm::utostr(Opts.getStackProtector()));
> - }
> - if (Opts.InstantiationDepth != DefaultLangOpts.InstantiationDepth) {
> - Res.push_back("-ftemplate-depth");
> - Res.push_back(llvm::utostr(Opts.InstantiationDepth));
> - }
> - if (Opts.ConstexprCallDepth != DefaultLangOpts.ConstexprCallDepth) {
> - Res.push_back("-fconstexpr-depth");
> - Res.push_back(llvm::utostr(Opts.ConstexprCallDepth));
> - }
> - if (!Opts.ObjCConstantStringClass.empty()) {
> - Res.push_back("-fconstant-string-class");
> - Res.push_back(Opts.ObjCConstantStringClass);
> - }
> + if (Opts.getStackProtector() != 0)
> + Res.push_back("-stack-protector", llvm::utostr(Opts.getStackProtector()));
> + if (Opts.InstantiationDepth != DefaultLangOpts.InstantiationDepth)
> + Res.push_back("-ftemplate-depth", llvm::utostr(Opts.InstantiationDepth));
> + if (Opts.ConstexprCallDepth != DefaultLangOpts.ConstexprCallDepth)
> + Res.push_back("-fconstexpr-depth", llvm::utostr(Opts.ConstexprCallDepth));
> + if (!Opts.ObjCConstantStringClass.empty())
> + Res.push_back("-fconstant-string-class", Opts.ObjCConstantStringClass);
> if (Opts.FakeAddressSpaceMap)
> Res.push_back("-ffake-address-space-map");
> if (Opts.ParseUnknownAnytype)
> @@ -877,52 +807,41 @@
> }
>
> static void PreprocessorOptsToArgs(const PreprocessorOptions &Opts,
> - std::vector<std::string> &Res) {
> + ToArgsList &Res) {
> for (unsigned i = 0, e = Opts.Macros.size(); i != e; ++i)
> Res.push_back(std::string(Opts.Macros[i].second ? "-U" : "-D") +
> Opts.Macros[i].first);
> for (unsigned i = 0, e = Opts.Includes.size(); i != e; ++i) {
> // FIXME: We need to avoid reincluding the implicit PCH and PTH includes.
> - Res.push_back("-include");
> - Res.push_back(Opts.Includes[i]);
> - }
> - for (unsigned i = 0, e = Opts.MacroIncludes.size(); i != e; ++i) {
> - Res.push_back("-imacros");
> - Res.push_back(Opts.MacroIncludes[i]);
> + Res.push_back("-include", Opts.Includes[i]);
> }
> + for (unsigned i = 0, e = Opts.MacroIncludes.size(); i != e; ++i)
> + Res.push_back("-imacros", Opts.MacroIncludes[i]);
> if (!Opts.UsePredefines)
> Res.push_back("-undef");
> if (Opts.DetailedRecord)
> Res.push_back("-detailed-preprocessing-record");
> - if (!Opts.ImplicitPCHInclude.empty()) {
> - Res.push_back("-include-pch");
> - Res.push_back(Opts.ImplicitPCHInclude);
> - }
> - if (!Opts.ImplicitPTHInclude.empty()) {
> - Res.push_back("-include-pth");
> - Res.push_back(Opts.ImplicitPTHInclude);
> - }
> + if (!Opts.ImplicitPCHInclude.empty())
> + Res.push_back("-include-pch", Opts.ImplicitPCHInclude);
> + if (!Opts.ImplicitPTHInclude.empty())
> + Res.push_back("-include-pth", Opts.ImplicitPTHInclude);
> if (!Opts.TokenCache.empty()) {
> - if (Opts.ImplicitPTHInclude.empty()) {
> - Res.push_back("-token-cache");
> - Res.push_back(Opts.TokenCache);
> - } else
> + if (Opts.ImplicitPTHInclude.empty())
> + Res.push_back("-token-cache", Opts.TokenCache);
> + else
> assert(Opts.ImplicitPTHInclude == Opts.TokenCache &&
> "Unsupported option combination!");
> }
> - for (unsigned i = 0, e = Opts.ChainedIncludes.size(); i != e; ++i) {
> - Res.push_back("-chain-include");
> - Res.push_back(Opts.ChainedIncludes[i]);
> - }
> + for (unsigned i = 0, e = Opts.ChainedIncludes.size(); i != e; ++i)
> + Res.push_back("-chain-include", Opts.ChainedIncludes[i]);
> for (unsigned i = 0, e = Opts.RemappedFiles.size(); i != e; ++i) {
> - Res.push_back("-remap-file");
> - Res.push_back(Opts.RemappedFiles[i].first + ";" +
> - Opts.RemappedFiles[i].second);
> + Res.push_back("-remap-file", Opts.RemappedFiles[i].first + ";" +
> + Opts.RemappedFiles[i].second);
> }
> }
>
> static void PreprocessorOutputOptsToArgs(const PreprocessorOutputOptions &Opts,
> - std::vector<std::string> &Res) {
> + ToArgsList &Res) {
> if (!Opts.ShowCPP && !Opts.ShowMacros)
> llvm::report_fatal_error("Invalid option combination!");
>
> @@ -940,43 +859,34 @@
> }
>
> static void TargetOptsToArgs(const TargetOptions &Opts,
> - std::vector<std::string> &Res) {
> + ToArgsList &Res) {
> Res.push_back("-triple");
> Res.push_back(Opts.Triple);
> - if (!Opts.CPU.empty()) {
> - Res.push_back("-target-cpu");
> - Res.push_back(Opts.CPU);
> - }
> - if (!Opts.ABI.empty()) {
> - Res.push_back("-target-abi");
> - Res.push_back(Opts.ABI);
> - }
> - if (!Opts.LinkerVersion.empty()) {
> - Res.push_back("-target-linker-version");
> - Res.push_back(Opts.LinkerVersion);
> - }
> - if (!Opts.CXXABI.empty()) {
> - Res.push_back("-cxx-abi");
> - Res.push_back(Opts.CXXABI);
> - }
> - for (unsigned i = 0, e = Opts.Features.size(); i != e; ++i) {
> - Res.push_back("-target-feature");
> - Res.push_back(Opts.Features[i]);
> - }
> + if (!Opts.CPU.empty())
> + Res.push_back("-target-cpu", Opts.CPU);
> + if (!Opts.ABI.empty())
> + Res.push_back("-target-abi", Opts.ABI);
> + if (!Opts.LinkerVersion.empty())
> + Res.push_back("-target-linker-version", Opts.LinkerVersion);
> + if (!Opts.CXXABI.empty())
> + Res.push_back("-cxx-abi", Opts.CXXABI);
> + for (unsigned i = 0, e = Opts.Features.size(); i != e; ++i)
> + Res.push_back("-target-feature", Opts.Features[i]);
> }
>
> void CompilerInvocation::toArgs(std::vector<std::string> &Res) {
> - AnalyzerOptsToArgs(getAnalyzerOpts(), Res);
> - CodeGenOptsToArgs(getCodeGenOpts(), Res);
> - DependencyOutputOptsToArgs(getDependencyOutputOpts(), Res);
> - DiagnosticOptsToArgs(getDiagnosticOpts(), Res);
> - FileSystemOptsToArgs(getFileSystemOpts(), Res);
> - FrontendOptsToArgs(getFrontendOpts(), Res);
> - HeaderSearchOptsToArgs(getHeaderSearchOpts(), Res);
> - LangOptsToArgs(*getLangOpts(), Res);
> - PreprocessorOptsToArgs(getPreprocessorOpts(), Res);
> - PreprocessorOutputOptsToArgs(getPreprocessorOutputOpts(), Res);
> - TargetOptsToArgs(getTargetOpts(), Res);
> + ToArgsList List(Res);
> + AnalyzerOptsToArgs(getAnalyzerOpts(), List);
> + CodeGenOptsToArgs(getCodeGenOpts(), List);
> + DependencyOutputOptsToArgs(getDependencyOutputOpts(), List);
> + DiagnosticOptsToArgs(getDiagnosticOpts(), List);
> + FileSystemOptsToArgs(getFileSystemOpts(), List);
> + FrontendOptsToArgs(getFrontendOpts(), List);
> + HeaderSearchOptsToArgs(getHeaderSearchOpts(), List);
> + LangOptsToArgs(*getLangOpts(), List);
> + PreprocessorOptsToArgs(getPreprocessorOpts(), List);
> + PreprocessorOutputOptsToArgs(getPreprocessorOutputOpts(), List);
> + TargetOptsToArgs(getTargetOpts(), List);
> }
>
> //===----------------------------------------------------------------------===//
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list