[clang] 02e3583 - [Driver] Simplify code. NFCI.
Benjamin Kramer via cfe-commits
cfe-commits at lists.llvm.org
Sun Jun 7 11:18:44 PDT 2020
Author: Benjamin Kramer
Date: 2020-06-07T20:18:14+02:00
New Revision: 02e35832c301e9813b0bb18e94db2a31c4849a73
URL: https://github.com/llvm/llvm-project/commit/02e35832c301e9813b0bb18e94db2a31c4849a73
DIFF: https://github.com/llvm/llvm-project/commit/02e35832c301e9813b0bb18e94db2a31c4849a73.diff
LOG: [Driver] Simplify code. NFCI.
Added:
Modified:
clang/include/clang/Driver/Phases.h
clang/include/clang/Driver/Types.h
clang/lib/Driver/Driver.cpp
clang/lib/Driver/Types.cpp
Removed:
################################################################################
diff --git a/clang/include/clang/Driver/Phases.h b/clang/include/clang/Driver/Phases.h
index 9003c5857351..ce914dd70514 100644
--- a/clang/include/clang/Driver/Phases.h
+++ b/clang/include/clang/Driver/Phases.h
@@ -22,10 +22,11 @@ namespace phases {
Assemble,
Link,
IfsMerge,
+ LastPhase = IfsMerge,
};
enum {
- MaxNumberOfPhases = IfsMerge + 1
+ MaxNumberOfPhases = LastPhase + 1
};
const char *getPhaseName(ID Id);
diff --git a/clang/include/clang/Driver/Types.h b/clang/include/clang/Driver/Types.h
index c7c38fa52593..97bf5fd672ab 100644
--- a/clang/include/clang/Driver/Types.h
+++ b/clang/include/clang/Driver/Types.h
@@ -45,9 +45,6 @@ namespace types {
/// temp file of this type, or null if unspecified.
const char *getTypeTempSuffix(ID Id, bool CLMode = false);
- /// onlyAssembleType - Should this type only be assembled.
- bool onlyAssembleType(ID Id);
-
/// onlyPrecompileType - Should this type only be precompiled.
bool onlyPrecompileType(ID Id);
@@ -101,13 +98,12 @@ namespace types {
ID lookupTypeForTypeSpecifier(const char *Name);
/// getCompilationPhases - Get the list of compilation phases ('Phases') to be
- /// done for type 'Id'.
- void getCompilationPhases(
- ID Id,
- llvm::SmallVectorImpl<phases::ID> &Phases);
- void getCompilationPhases(const clang::driver::Driver &Driver,
- llvm::opt::DerivedArgList &DAL, ID Id,
- llvm::SmallVectorImpl<phases::ID> &Phases);
+ /// done for type 'Id' up until including LastPhase.
+ llvm::SmallVector<phases::ID, phases::MaxNumberOfPhases>
+ getCompilationPhases(ID Id, phases::ID LastPhase = phases::LastPhase);
+ llvm::SmallVector<phases::ID, phases::MaxNumberOfPhases>
+ getCompilationPhases(const clang::driver::Driver &Driver,
+ llvm::opt::DerivedArgList &DAL, ID Id);
/// lookupCXXTypeForCType - Lookup CXX input type that corresponds to given
/// C type (used for clang++ emulation of g++ behaviour)
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 5c726b23148f..8cc5eceaa512 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -3276,8 +3276,7 @@ void Driver::handleArguments(Compilation &C, DerivedArgList &Args,
types::ID InputType = I.first;
const Arg *InputArg = I.second;
- llvm::SmallVector<phases::ID, phases::MaxNumberOfPhases> PL;
- types::getCompilationPhases(InputType, PL);
+ auto PL = types::getCompilationPhases(InputType);
LastPLSize = PL.size();
// If the first step comes after the final phase we are doing as part of
@@ -3322,11 +3321,9 @@ void Driver::handleArguments(Compilation &C, DerivedArgList &Args,
// Add a separate precompile phase for the compile phase.
if (FinalPhase >= phases::Compile) {
const types::ID HeaderType = lookupHeaderTypeForSourceType(InputType);
- llvm::SmallVector<phases::ID, phases::MaxNumberOfPhases> PCHPL;
- types::getCompilationPhases(HeaderType, PCHPL);
// Build the pipeline for the pch file.
Action *ClangClPch = C.MakeAction<InputAction>(*InputArg, HeaderType);
- for (phases::ID Phase : PCHPL)
+ for (phases::ID Phase : types::getCompilationPhases(HeaderType))
ClangClPch = ConstructPhaseAction(C, Args, Phase, ClangClPch);
assert(ClangClPch);
Actions.push_back(ClangClPch);
@@ -3409,13 +3406,11 @@ void Driver::BuildActions(Compilation &C, DerivedArgList &Args,
types::ID InputType = I.first;
const Arg *InputArg = I.second;
- llvm::SmallVector<phases::ID, phases::MaxNumberOfPhases> PL;
- types::getCompilationPhases(*this, Args, InputType, PL);
+ auto PL = types::getCompilationPhases(*this, Args, InputType);
if (PL.empty())
continue;
- llvm::SmallVector<phases::ID, phases::MaxNumberOfPhases> FullPL;
- types::getCompilationPhases(InputType, FullPL);
+ auto FullPL = types::getCompilationPhases(InputType);
// Build the pipeline for this file.
Action *Current = C.MakeAction<InputAction>(*InputArg, InputType);
@@ -3509,15 +3504,9 @@ void Driver::BuildActions(Compilation &C, DerivedArgList &Args,
C.MakeAction<IfsMergeJobAction>(MergerInputs, types::TY_Image));
if (Args.hasArg(options::OPT_emit_interface_stubs)) {
- llvm::SmallVector<phases::ID, phases::MaxNumberOfPhases> PhaseList;
- if (Args.hasArg(options::OPT_c)) {
- llvm::SmallVector<phases::ID, phases::MaxNumberOfPhases> CompilePhaseList;
- types::getCompilationPhases(types::TY_IFS_CPP, CompilePhaseList);
- llvm::copy_if(CompilePhaseList, std::back_inserter(PhaseList),
- [&](phases::ID Phase) { return Phase <= phases::Compile; });
- } else {
- types::getCompilationPhases(types::TY_IFS_CPP, PhaseList);
- }
+ auto PhaseList = types::getCompilationPhases(
+ types::TY_IFS_CPP,
+ Args.hasArg(options::OPT_c) ? phases::Compile : phases::LastPhase);
ActionList MergerInputs;
diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp
index 8e1236bd08ec..3ab48a0180c1 100644
--- a/clang/lib/Driver/Types.cpp
+++ b/clang/lib/Driver/Types.cpp
@@ -90,12 +90,6 @@ const char *types::getTypeTempSuffix(ID Id, bool CLMode) {
return getInfo(Id).TempSuffix;
}
-bool types::onlyAssembleType(ID Id) {
- return getInfo(Id).Phases.contains(phases::Assemble) &&
- !getInfo(Id).Phases.contains(phases::Compile) &&
- !getInfo(Id).Phases.contains(phases::Backend);
-}
-
bool types::onlyPrecompileType(ID Id) {
return getInfo(Id).Phases.contains(phases::Precompile) &&
!isPreprocessedModuleType(Id);
@@ -311,23 +305,21 @@ types::ID types::lookupTypeForTypeSpecifier(const char *Name) {
return TY_INVALID;
}
-// FIXME: Why don't we just put this list in the defs file, eh.
-// FIXME: The list is now in Types.def but for now this function will verify
-// the old behavior and a subsequent change will delete most of the body.
-void types::getCompilationPhases(ID Id, llvm::SmallVectorImpl<phases::ID> &P) {
+llvm::SmallVector<phases::ID, phases::MaxNumberOfPhases>
+types::getCompilationPhases(ID Id, phases::ID LastPhase) {
+ llvm::SmallVector<phases::ID, phases::MaxNumberOfPhases> P;
const auto &Info = getInfo(Id);
- for (int I = 0; I != phases::MaxNumberOfPhases; ++I)
+ for (int I = 0; I <= LastPhase; ++I)
if (Info.Phases.contains(static_cast<phases::ID>(I)))
P.push_back(static_cast<phases::ID>(I));
- assert(0 < P.size() && "Not enough phases in list");
assert(P.size() <= phases::MaxNumberOfPhases && "Too many phases in list");
+ return P;
}
-void types::getCompilationPhases(const clang::driver::Driver &Driver,
- llvm::opt::DerivedArgList &DAL, ID Id,
- llvm::SmallVectorImpl<phases::ID> &P) {
- llvm::SmallVector<phases::ID, phases::MaxNumberOfPhases> PhaseList;
- types::getCompilationPhases(Id, PhaseList);
+llvm::SmallVector<phases::ID, phases::MaxNumberOfPhases>
+types::getCompilationPhases(const clang::driver::Driver &Driver,
+ llvm::opt::DerivedArgList &DAL, ID Id) {
+ phases::ID LastPhase;
// Filter to compiler mode. When the compiler is run as a preprocessor then
// compilation is not an option.
@@ -336,14 +328,12 @@ void types::getCompilationPhases(const clang::driver::Driver &Driver,
DAL.getLastArg(options::OPT__SLASH_EP) ||
DAL.getLastArg(options::OPT_M, options::OPT_MM) ||
DAL.getLastArg(options::OPT__SLASH_P))
- llvm::copy_if(PhaseList, std::back_inserter(P),
- [](phases::ID Phase) { return Phase <= phases::Preprocess; });
+ LastPhase = phases::Preprocess;
// --precompile only runs up to precompilation.
// This is a clang extension and is not compatible with GCC.
else if (DAL.getLastArg(options::OPT__precompile))
- llvm::copy_if(PhaseList, std::back_inserter(P),
- [](phases::ID Phase) { return Phase <= phases::Precompile; });
+ LastPhase = phases::Precompile;
// -{fsyntax-only,-analyze,emit-ast} only run up to the compiler.
else if (DAL.getLastArg(options::OPT_fsyntax_only) ||
@@ -355,21 +345,20 @@ void types::getCompilationPhases(const clang::driver::Driver &Driver,
DAL.getLastArg(options::OPT__migrate) ||
DAL.getLastArg(options::OPT__analyze) ||
DAL.getLastArg(options::OPT_emit_ast))
- llvm::copy_if(PhaseList, std::back_inserter(P),
- [](phases::ID Phase) { return Phase <= phases::Compile; });
+ LastPhase = phases::Compile;
else if (DAL.getLastArg(options::OPT_S) ||
DAL.getLastArg(options::OPT_emit_llvm))
- llvm::copy_if(PhaseList, std::back_inserter(P),
- [](phases::ID Phase) { return Phase <= phases::Backend; });
+ LastPhase = phases::Backend;
else if (DAL.getLastArg(options::OPT_c))
- llvm::copy_if(PhaseList, std::back_inserter(P),
- [](phases::ID Phase) { return Phase <= phases::Assemble; });
+ LastPhase = phases::Assemble;
// Generally means, do every phase until Link.
else
- P = PhaseList;
+ LastPhase = phases::LastPhase;
+
+ return types::getCompilationPhases(Id, LastPhase);
}
ID types::lookupCXXTypeForCType(ID Id) {
More information about the cfe-commits
mailing list