From: Rafael Espindola Date: Mon, 18 Mar 2013 18:50:01 +0000 (+0000) Subject: Use early returns when checking if we already constructed a tool and when X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f3260565f46491a0d99e41d47a13767218242ce5;p=clang Use early returns when checking if we already constructed a tool and when delegating to Generic_GCC::SelectTool (it already updates the tool map). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@177305 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp index 1ec477f75f..8506b9799e 100644 --- a/lib/Driver/ToolChains.cpp +++ b/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/lib/Driver/ToolChains.h b/lib/Driver/ToolChains.h index b8f469d35b..a11ae14a64 100644 --- a/lib/Driver/ToolChains.h +++ b/lib/Driver/ToolChains.h @@ -502,8 +502,6 @@ private: class LLVM_LIBRARY_VISIBILITY Hexagon_TC : public Linux { protected: - mutable llvm::DenseMap Tools; - GCCVersion GCCLibAndIncVersion; public: diff --git a/lib/Driver/WindowsToolChain.cpp b/lib/Driver/WindowsToolChain.cpp index 52d7e191e6..60781ca6bb 100644 --- a/lib/Driver/WindowsToolChain.cpp +++ b/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;