diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-11-11 09:38:56 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-11-11 09:38:56 +0000 |
commit | 29a790ba422cfeeea9546b6e76777d98fa73cd67 (patch) | |
tree | e5e6c061931daf684b05e292a2847c3f02837d3c /tools/clang-cc | |
parent | dc8bbac2f8b78ddef100ae8115fd5a776d1b564c (diff) |
Simplifiy target feature handling by coalescing all the logic into
InitializeCompileOptions.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@86826 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/clang-cc')
-rw-r--r-- | tools/clang-cc/Options.cpp | 61 | ||||
-rw-r--r-- | tools/clang-cc/Options.h | 11 | ||||
-rw-r--r-- | tools/clang-cc/clang-cc.cpp | 7 |
3 files changed, 30 insertions, 49 deletions
diff --git a/tools/clang-cc/Options.cpp b/tools/clang-cc/Options.cpp index 973b53a0d2..7b22d28fcb 100644 --- a/tools/clang-cc/Options.cpp +++ b/tools/clang-cc/Options.cpp @@ -530,15 +530,13 @@ isysroot("isysroot", llvm::cl::value_desc("dir"), llvm::cl::init("/"), // Option Object Construction //===----------------------------------------------------------------------===// -/// ComputeTargetFeatures - Recompute the target feature list to only -/// be the list of things that are enabled, based on the target cpu -/// and feature list. -void clang::ComputeFeatureMap(TargetInfo &Target, - llvm::StringMap<bool> &Features) { +void clang::InitializeCompileOptions(CompileOptions &Opts, + const TargetInfo &Target) { using namespace codegenoptions; - assert(Features.empty() && "invalid map"); - // Initialize the feature map based on the target. + // Compute the target features, we need the target to handle this because + // features may have dependencies on one another. + llvm::StringMap<bool> Features; Target.getDefaultFeatures(TargetCPU, Features); // Apply the user specified deltas. @@ -552,20 +550,22 @@ void clang::ComputeFeatureMap(TargetInfo &Target, Name); exit(1); } + + // Apply the feature via the target. if (!Target.setFeatureEnabled(Features, Name + 1, (Name[0] == '+'))) { fprintf(stderr, "error: clang-cc: invalid target feature name: %s\n", Name + 1); exit(1); } } -} -void clang::InitializeCompileOptions(CompileOptions &Opts, - const llvm::StringMap<bool> &Features) { - using namespace codegenoptions; - Opts.OptimizeSize = OptSize; - Opts.DebugInfo = GenerateDebugInfo; - Opts.DisableLLVMOpts = DisableLLVMOptimizations; + // Add the features to the compile options. + // + // FIXME: If we are completely confident that we have the right set, we only + // need to pass the minuses. + for (llvm::StringMap<bool>::const_iterator it = Features.begin(), + ie = Features.end(); it != ie; ++it) + Opts.Features.push_back(std::string(it->second ? "+" : "-") + it->first()); // -Os implies -O2 Opts.OptimizationLevel = OptSize ? 2 : OptLevel; @@ -574,30 +574,20 @@ void clang::InitializeCompileOptions(CompileOptions &Opts, Opts.Inlining = (Opts.OptimizationLevel > 1) ? CompileOptions::NormalInlining : CompileOptions::OnlyAlwaysInlining; - Opts.UnrollLoops = (Opts.OptimizationLevel > 1 && !OptSize); + Opts.CPU = TargetCPU; + Opts.DebugInfo = GenerateDebugInfo; + Opts.DisableLLVMOpts = DisableLLVMOptimizations; + Opts.DisableRedZone = DisableRedZone; + Opts.MergeAllConstants = !NoMergeConstants; + Opts.NoCommon = NoCommon; + Opts.NoImplicitFloat = NoImplicitFloat; + Opts.OptimizeSize = OptSize; Opts.SimplifyLibCalls = 1; + Opts.UnrollLoops = (Opts.OptimizationLevel > 1 && !OptSize); #ifdef NDEBUG Opts.VerifyModule = 0; #endif - - Opts.CPU = TargetCPU; - Opts.Features.clear(); - for (llvm::StringMap<bool>::const_iterator it = Features.begin(), - ie = Features.end(); it != ie; ++it) { - // FIXME: If we are completely confident that we have the right set, we only - // need to pass the minuses. - std::string Name(it->second ? "+" : "-"); - Name += it->first(); - Opts.Features.push_back(Name); - } - - Opts.NoCommon = NoCommon; - - Opts.DisableRedZone = DisableRedZone; - Opts.NoImplicitFloat = NoImplicitFloat; - - Opts.MergeAllConstants = !NoMergeConstants; } void clang::InitializeDiagnosticOptions(DiagnosticOptions &Opts) { @@ -769,8 +759,7 @@ void clang::InitializePreprocessorOptions(PreprocessorOptions &Opts) { void clang::InitializeLangOptions(LangOptions &Options, LangKind LK, TargetInfo &Target, - const CompileOptions &CompileOpts, - const llvm::StringMap<bool> &Features) { + const CompileOptions &CompileOpts) { using namespace langoptions; bool NoPreprocess = false; @@ -836,7 +825,7 @@ void clang::InitializeLangOptions(LangOptions &Options, LangKind LK, // Pass the map of target features to the target for validation and // processing. - Target.HandleTargetFeatures(Features); + Target.HandleTargetFeatures(CompileOpts.Features); if (LangStd == lang_unspecified) { // Based on the base language, pick one. diff --git a/tools/clang-cc/Options.h b/tools/clang-cc/Options.h index aacf0a3def..6d1447d991 100644 --- a/tools/clang-cc/Options.h +++ b/tools/clang-cc/Options.h @@ -10,7 +10,7 @@ #ifndef LLVM_CLANGCC_OPTIONS_H #define LLVM_CLANGCC_OPTIONS_H -#include "llvm/ADT/StringMap.h" +#include "llvm/ADT/StringRef.h" namespace clang { @@ -39,14 +39,10 @@ enum LangKind { void InitializeAnalyzerOptions(AnalyzerOptions &Opts); -// FIXME: This can be sunk into InitializeCompileOptions now that that happens -// before language initialization? -void ComputeFeatureMap(TargetInfo &Target, llvm::StringMap<bool> &Features); - void InitializeDiagnosticOptions(DiagnosticOptions &Opts); void InitializeCompileOptions(CompileOptions &Opts, - const llvm::StringMap<bool> &Features); + const TargetInfo &Target); void InitializeHeaderSearchOptions(HeaderSearchOptions &Opts, llvm::StringRef BuiltinIncludePath, @@ -55,8 +51,7 @@ void InitializeHeaderSearchOptions(HeaderSearchOptions &Opts, void InitializeLangOptions(LangOptions &Options, LangKind LK, TargetInfo &Target, - const CompileOptions &CompileOpts, - const llvm::StringMap<bool> &Features); + const CompileOptions &CompileOpts); void InitializePreprocessorOptions(PreprocessorOptions &Opts); diff --git a/tools/clang-cc/clang-cc.cpp b/tools/clang-cc/clang-cc.cpp index 2a40656292..fd1153ce87 100644 --- a/tools/clang-cc/clang-cc.cpp +++ b/tools/clang-cc/clang-cc.cpp @@ -1099,12 +1099,9 @@ static void ConstructCompilerInvocation(CompilerInvocation &Opts, Opts.getOutputFile() = OutputFile; - // Compute the feature set, which may effect the language. - ComputeFeatureMap(Target, Opts.getTargetFeatures()); - // Initialize backend options, which may also be used to key some language // options. - InitializeCompileOptions(Opts.getCompileOpts(), Opts.getTargetFeatures()); + InitializeCompileOptions(Opts.getCompileOpts(), Target); // Initialize language options. LangOptions LangInfo; @@ -1113,7 +1110,7 @@ static void ConstructCompilerInvocation(CompilerInvocation &Opts, // code path to make this obvious. if (LK != langkind_ast) InitializeLangOptions(Opts.getLangOpts(), LK, Target, - Opts.getCompileOpts(), Opts.getTargetFeatures()); + Opts.getCompileOpts()); // Initialize the header search options. InitializeHeaderSearchOptions(Opts.getHeaderSearchOpts(), |