diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-03-18 18:50:01 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-03-18 18:50:01 +0000 |
| commit | c8e3a0162b54f2eb6df17cf3f3c9f86a1d6552a5 (patch) | |
| tree | 96c56e5840e956befa1cf1fd20592d0eb2800bb5 | |
| parent | 7415c8b171a2b5ff1e9d4aa8ef435a720f0f324e (diff) | |
| download | bcm5719-llvm-c8e3a0162b54f2eb6df17cf3f3c9f86a1d6552a5.tar.gz bcm5719-llvm-c8e3a0162b54f2eb6df17cf3f3c9f86a1d6552a5.zip | |
Use early returns when checking if we already constructed a tool and when
delegating to Generic_GCC::SelectTool (it already updates the tool map).
llvm-svn: 177305
| -rw-r--r-- | clang/lib/Driver/ToolChains.cpp | 377 | ||||
| -rw-r--r-- | clang/lib/Driver/ToolChains.h | 2 | ||||
| -rw-r--r-- | clang/lib/Driver/WindowsToolChain.cpp | 47 |
3 files changed, 219 insertions, 207 deletions
diff --git a/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp index 1ec477f75f4..8506b9799e5 100644 --- a/clang/lib/Driver/ToolChains.cpp +++ b/clang/lib/Driver/ToolChains.cpp @@ -185,33 +185,34 @@ Tool &Darwin::SelectTool(const JobAction &JA) const { } Tool *&T = Tools[Key]; - if (!T) { - switch (Key) { - case Action::InputClass: - case Action::BindArchClass: - llvm_unreachable("Invalid tool kind."); - case Action::PreprocessJobClass: - case Action::AnalyzeJobClass: - case Action::MigrateJobClass: - case Action::PrecompileJobClass: - case Action::CompileJobClass: - T = new tools::Clang(*this); break; - case Action::AssembleJobClass: { - if (useIntegratedAs()) - T = new tools::ClangAs(*this); - else - T = new tools::darwin::Assemble(*this); - break; - } - case Action::LinkJobClass: - T = new tools::darwin::Link(*this); break; - case Action::LipoJobClass: - T = new tools::darwin::Lipo(*this); break; - case Action::DsymutilJobClass: - T = new tools::darwin::Dsymutil(*this); break; - case Action::VerifyJobClass: - T = new tools::darwin::VerifyDebug(*this); break; - } + if (T) + return *T; + + switch (Key) { + case Action::InputClass: + case Action::BindArchClass: + llvm_unreachable("Invalid tool kind."); + case Action::PreprocessJobClass: + case Action::AnalyzeJobClass: + case Action::MigrateJobClass: + case Action::PrecompileJobClass: + case Action::CompileJobClass: + T = new tools::Clang(*this); break; + case Action::AssembleJobClass: { + if (useIntegratedAs()) + T = new tools::ClangAs(*this); + else + T = new tools::darwin::Assemble(*this); + break; + } + case Action::LinkJobClass: + T = new tools::darwin::Link(*this); break; + case Action::LipoJobClass: + T = new tools::darwin::Lipo(*this); break; + case Action::DsymutilJobClass: + T = new tools::darwin::Dsymutil(*this); break; + case Action::VerifyJobClass: + T = new tools::darwin::VerifyDebug(*this); break; } return *T; @@ -1390,34 +1391,35 @@ Tool &Generic_GCC::SelectTool(const JobAction &JA) const { Key = JA.getKind(); Tool *&T = Tools[Key]; - if (!T) { - switch (Key) { - case Action::InputClass: - case Action::BindArchClass: - llvm_unreachable("Invalid tool kind."); - case Action::PreprocessJobClass: - T = new tools::gcc::Preprocess(*this); break; - case Action::PrecompileJobClass: - T = new tools::gcc::Precompile(*this); break; - case Action::AnalyzeJobClass: - case Action::MigrateJobClass: - T = new tools::Clang(*this); break; - case Action::CompileJobClass: - T = new tools::gcc::Compile(*this); break; - case Action::AssembleJobClass: - T = new tools::gcc::Assemble(*this); break; - case Action::LinkJobClass: - T = new tools::gcc::Link(*this); break; - - // This is a bit ungeneric, but the only platform using a driver - // driver is Darwin. - case Action::LipoJobClass: - T = new tools::darwin::Lipo(*this); break; - case Action::DsymutilJobClass: - T = new tools::darwin::Dsymutil(*this); break; - case Action::VerifyJobClass: - T = new tools::darwin::VerifyDebug(*this); break; - } + if (T) + return *T; + + switch (Key) { + case Action::InputClass: + case Action::BindArchClass: + llvm_unreachable("Invalid tool kind."); + case Action::PreprocessJobClass: + T = new tools::gcc::Preprocess(*this); break; + case Action::PrecompileJobClass: + T = new tools::gcc::Precompile(*this); break; + case Action::AnalyzeJobClass: + case Action::MigrateJobClass: + T = new tools::Clang(*this); break; + case Action::CompileJobClass: + T = new tools::gcc::Compile(*this); break; + case Action::AssembleJobClass: + T = new tools::gcc::Assemble(*this); break; + case Action::LinkJobClass: + T = new tools::gcc::Link(*this); break; + + // This is a bit ungeneric, but the only platform using a driver + // driver is Darwin. + case Action::LipoJobClass: + T = new tools::darwin::Lipo(*this); break; + case Action::DsymutilJobClass: + T = new tools::darwin::Dsymutil(*this); break; + case Action::VerifyJobClass: + T = new tools::darwin::VerifyDebug(*this); break; } return *T; @@ -1559,20 +1561,21 @@ Tool &Hexagon_TC::SelectTool(const JobAction &JA) const { Key = JA.getKind(); Tool *&T = Tools[Key]; - if (!T) { - switch (Key) { - case Action::InputClass: - case Action::BindArchClass: - assert(0 && "Invalid tool kind."); - case Action::AnalyzeJobClass: - T = new tools::Clang(*this); break; - case Action::AssembleJobClass: - T = new tools::hexagon::Assemble(*this); break; - case Action::LinkJobClass: - T = new tools::hexagon::Link(*this); break; - default: - assert(false && "Unsupported action for Hexagon target."); - } + if (T) + return *T; + + switch (Key) { + case Action::InputClass: + case Action::BindArchClass: + assert(0 && "Invalid tool kind."); + case Action::AnalyzeJobClass: + T = new tools::Clang(*this); break; + case Action::AssembleJobClass: + T = new tools::hexagon::Assemble(*this); break; + case Action::LinkJobClass: + T = new tools::hexagon::Link(*this); break; + default: + assert(false && "Unsupported action for Hexagon target."); } return *T; @@ -1700,15 +1703,16 @@ Tool &TCEToolChain::SelectTool(const JobAction &JA) const { Key = Action::AnalyzeJobClass; Tool *&T = Tools[Key]; - if (!T) { - switch (Key) { - case Action::PreprocessJobClass: - T = new tools::gcc::Preprocess(*this); break; - case Action::AnalyzeJobClass: - T = new tools::Clang(*this); break; - default: - llvm_unreachable("Unsupported action for TCE target."); - } + if (T) + return *T; + + switch (Key) { + case Action::PreprocessJobClass: + T = new tools::gcc::Preprocess(*this); break; + case Action::AnalyzeJobClass: + T = new tools::Clang(*this); break; + default: + llvm_unreachable("Unsupported action for TCE target."); } return *T; } @@ -1729,20 +1733,21 @@ Tool &OpenBSD::SelectTool(const JobAction &JA) const { Key = JA.getKind(); Tool *&T = Tools[Key]; - if (!T) { - switch (Key) { - case Action::AssembleJobClass: { - if (useIntegratedAs()) - T = new tools::ClangAs(*this); - else - T = new tools::openbsd::Assemble(*this); - break; - } - case Action::LinkJobClass: - T = new tools::openbsd::Link(*this); break; - default: - T = &Generic_GCC::SelectTool(JA); - } + if (T) + return *T; + + switch (Key) { + case Action::AssembleJobClass: { + if (useIntegratedAs()) + T = new tools::ClangAs(*this); + else + T = new tools::openbsd::Assemble(*this); + break; + } + case Action::LinkJobClass: + T = new tools::openbsd::Link(*this); break; + default: + return Generic_GCC::SelectTool(JA); } return *T; @@ -1764,20 +1769,21 @@ Tool &Bitrig::SelectTool(const JobAction &JA) const { Key = JA.getKind(); Tool *&T = Tools[Key]; - if (!T) { - switch (Key) { - case Action::AssembleJobClass: { - if (useIntegratedAs()) - T = new tools::ClangAs(*this); - else - T = new tools::bitrig::Assemble(*this); - break; - } - case Action::LinkJobClass: - T = new tools::bitrig::Link(*this); break; - default: - T = &Generic_GCC::SelectTool(JA); - } + if (T) + return *T; + + switch (Key) { + case Action::AssembleJobClass: { + if (useIntegratedAs()) + T = new tools::ClangAs(*this); + else + T = new tools::bitrig::Assemble(*this); + break; + } + case Action::LinkJobClass: + T = new tools::bitrig::Link(*this); break; + default: + return Generic_GCC::SelectTool(JA); } return *T; @@ -1851,19 +1857,20 @@ Tool &FreeBSD::SelectTool(const JobAction &JA) const { Key = JA.getKind(); Tool *&T = Tools[Key]; - if (!T) { - switch (Key) { - case Action::AssembleJobClass: - if (useIntegratedAs()) - T = new tools::ClangAs(*this); - else - T = new tools::freebsd::Assemble(*this); - break; - case Action::LinkJobClass: - T = new tools::freebsd::Link(*this); break; - default: - T = &Generic_GCC::SelectTool(JA); - } + if (T) + return *T; + + switch (Key) { + case Action::AssembleJobClass: + if (useIntegratedAs()) + T = new tools::ClangAs(*this); + else + T = new tools::freebsd::Assemble(*this); + break; + case Action::LinkJobClass: + T = new tools::freebsd::Link(*this); break; + default: + return Generic_GCC::SelectTool(JA); } return *T; @@ -1908,20 +1915,21 @@ Tool &NetBSD::SelectTool( const JobAction &JA) const { Key = JA.getKind(); Tool *&T = Tools[Key]; - if (!T) { - switch (Key) { - case Action::AssembleJobClass: - if (useIntegratedAs()) - T = new tools::ClangAs(*this); - else - T = new tools::netbsd::Assemble(*this); - break; - case Action::LinkJobClass: - T = new tools::netbsd::Link(*this); - break; - default: - T = &Generic_GCC::SelectTool(JA); - } + if (T) + return *T; + + switch (Key) { + case Action::AssembleJobClass: + if (useIntegratedAs()) + T = new tools::ClangAs(*this); + else + T = new tools::netbsd::Assemble(*this); + break; + case Action::LinkJobClass: + T = new tools::netbsd::Link(*this); + break; + default: + return Generic_GCC::SelectTool(JA); } return *T; @@ -1943,15 +1951,16 @@ Tool &Minix::SelectTool(const JobAction &JA) const { Key = JA.getKind(); Tool *&T = Tools[Key]; - if (!T) { - switch (Key) { - case Action::AssembleJobClass: - T = new tools::minix::Assemble(*this); break; - case Action::LinkJobClass: - T = new tools::minix::Link(*this); break; - default: - T = &Generic_GCC::SelectTool(JA); - } + if (T) + return *T; + + switch (Key) { + case Action::AssembleJobClass: + T = new tools::minix::Assemble(*this); break; + case Action::LinkJobClass: + T = new tools::minix::Link(*this); break; + default: + return Generic_GCC::SelectTool(JA); } return *T; @@ -1983,15 +1992,16 @@ Tool &AuroraUX::SelectTool(const JobAction &JA) const { Key = JA.getKind(); Tool *&T = Tools[Key]; - if (!T) { - switch (Key) { - case Action::AssembleJobClass: - T = new tools::auroraux::Assemble(*this); break; - case Action::LinkJobClass: - T = new tools::auroraux::Link(*this); break; - default: - T = &Generic_GCC::SelectTool(JA); - } + if (T) + return *T; + + switch (Key) { + case Action::AssembleJobClass: + T = new tools::auroraux::Assemble(*this); break; + case Action::LinkJobClass: + T = new tools::auroraux::Link(*this); break; + default: + return Generic_GCC::SelectTool(JA); } return *T; @@ -2019,15 +2029,16 @@ Tool &Solaris::SelectTool(const JobAction &JA) const { Key = JA.getKind(); Tool *&T = Tools[Key]; - if (!T) { - switch (Key) { - case Action::AssembleJobClass: - T = new tools::solaris::Assemble(*this); break; - case Action::LinkJobClass: - T = new tools::solaris::Link(*this); break; - default: - T = &Generic_GCC::SelectTool(JA); - } + if (T) + return *T; + + switch (Key) { + case Action::AssembleJobClass: + T = new tools::solaris::Assemble(*this); break; + case Action::LinkJobClass: + T = new tools::solaris::Link(*this); break; + default: + return Generic_GCC::SelectTool(JA); } return *T; @@ -2407,19 +2418,20 @@ Tool &Linux::SelectTool( const JobAction &JA) const { Key = JA.getKind(); Tool *&T = Tools[Key]; - if (!T) { - switch (Key) { - case Action::AssembleJobClass: - if (useIntegratedAs()) - T = new tools::ClangAs(*this); - else - T = new tools::linuxtools::Assemble(*this); - break; - case Action::LinkJobClass: - T = new tools::linuxtools::Link(*this); break; - default: - T = &Generic_GCC::SelectTool(JA); - } + if (T) + return *T; + + switch (Key) { + case Action::AssembleJobClass: + if (useIntegratedAs()) + T = new tools::ClangAs(*this); + else + T = new tools::linuxtools::Assemble(*this); + break; + case Action::LinkJobClass: + T = new tools::linuxtools::Link(*this); break; + default: + return Generic_GCC::SelectTool(JA); } return *T; @@ -2659,15 +2671,16 @@ Tool &DragonFly::SelectTool(const JobAction &JA) const { Key = JA.getKind(); Tool *&T = Tools[Key]; - if (!T) { - switch (Key) { - case Action::AssembleJobClass: - T = new tools::dragonfly::Assemble(*this); break; - case Action::LinkJobClass: - T = new tools::dragonfly::Link(*this); break; - default: - T = &Generic_GCC::SelectTool(JA); - } + if (T) + return *T; + + switch (Key) { + case Action::AssembleJobClass: + T = new tools::dragonfly::Assemble(*this); break; + case Action::LinkJobClass: + T = new tools::dragonfly::Link(*this); break; + default: + return Generic_GCC::SelectTool(JA); } return *T; diff --git a/clang/lib/Driver/ToolChains.h b/clang/lib/Driver/ToolChains.h index b8f469d35b2..a11ae14a645 100644 --- a/clang/lib/Driver/ToolChains.h +++ b/clang/lib/Driver/ToolChains.h @@ -502,8 +502,6 @@ private: class LLVM_LIBRARY_VISIBILITY Hexagon_TC : public Linux { protected: - mutable llvm::DenseMap<unsigned, Tool*> Tools; - GCCVersion GCCLibAndIncVersion; public: diff --git a/clang/lib/Driver/WindowsToolChain.cpp b/clang/lib/Driver/WindowsToolChain.cpp index 52d7e191e60..60781ca6bb1 100644 --- a/clang/lib/Driver/WindowsToolChain.cpp +++ b/clang/lib/Driver/WindowsToolChain.cpp @@ -44,29 +44,30 @@ Tool &Windows::SelectTool(const JobAction &JA) const { Key = JA.getKind(); Tool *&T = Tools[Key]; - if (!T) { - switch (Key) { - case Action::InputClass: - case Action::BindArchClass: - case Action::LipoJobClass: - case Action::DsymutilJobClass: - case Action::VerifyJobClass: - case Action::PreprocessJobClass: - case Action::PrecompileJobClass: - case Action::AnalyzeJobClass: - case Action::MigrateJobClass: - case Action::CompileJobClass: - T = new tools::Clang(*this); break; - case Action::AssembleJobClass: - if (!useIntegratedAs() && - getTriple().getEnvironment() == llvm::Triple::MachO) - T = new tools::darwin::Assemble(*this); - else - T = new tools::ClangAs(*this); - break; - case Action::LinkJobClass: - T = new tools::visualstudio::Link(*this); break; - } + if (T) + return *T; + + switch (Key) { + case Action::InputClass: + case Action::BindArchClass: + case Action::LipoJobClass: + case Action::DsymutilJobClass: + case Action::VerifyJobClass: + case Action::PreprocessJobClass: + case Action::PrecompileJobClass: + case Action::AnalyzeJobClass: + case Action::MigrateJobClass: + case Action::CompileJobClass: + T = new tools::Clang(*this); break; + case Action::AssembleJobClass: + if (!useIntegratedAs() && + getTriple().getEnvironment() == llvm::Triple::MachO) + T = new tools::darwin::Assemble(*this); + else + T = new tools::ClangAs(*this); + break; + case Action::LinkJobClass: + T = new tools::visualstudio::Link(*this); break; } return *T; |

