diff options
Diffstat (limited to 'clang/lib/Driver')
| -rw-r--r-- | clang/lib/Driver/Tools.cpp | 21 | 
1 files changed, 2 insertions, 19 deletions
| diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 3257946d28d..fc7c726a788 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -1335,14 +1335,6 @@ void Clang::AddX86TargetArgs(const ArgList &Args,      CmdArgs.push_back(CPUName);    } -  // The required algorithm here is slightly strange: the options are applied -  // in order (so -mno-sse -msse2 disables SSE3), but any option that gets -  // directly overridden later is ignored (so "-mno-sse -msse2 -mno-sse2 -msse" -  // is equivalent to "-mno-sse2 -msse"). The -cc1 handling deals with the -  // former correctly, but not the latter; handle directly-overridden -  // attributes here. -  llvm::StringMap<unsigned> PrevFeature; -  std::vector<const char*> Features;    for (arg_iterator it = Args.filtered_begin(options::OPT_m_x86_Features_Group),           ie = Args.filtered_end(); it != ie; ++it) {      StringRef Name = (*it)->getOption().getName(); @@ -1356,17 +1348,8 @@ void Clang::AddX86TargetArgs(const ArgList &Args,      if (IsNegative)        Name = Name.substr(3); -    unsigned& Prev = PrevFeature[Name]; -    if (Prev) -      Features[Prev - 1] = 0; -    Prev = Features.size() + 1; -    Features.push_back(Args.MakeArgString((IsNegative ? "-" : "+") + Name)); -  } -  for (unsigned i = 0; i < Features.size(); i++) { -    if (Features[i]) { -      CmdArgs.push_back("-target-feature"); -      CmdArgs.push_back(Features[i]); -    } +    CmdArgs.push_back("-target-feature"); +    CmdArgs.push_back(Args.MakeArgString((IsNegative ? "-" : "+") + Name));    }  } | 

