forked from OSchip/llvm-project
[clang] Remove duplication in types::getCompilationPhases()
Call Driver::getFinalPhase() instead of duplicating it.
https://reviews.llvm.org/D65993 added the duplication, then
02e35832c3
maded it more obviously a copy of getFinalPhase().
The only difference is that getCompilationPhases() used to use
LastPhase / IfsMerge where getFinalPhase() used Link. Adapt
getFinalPhase() to return IfsMerge when needed.
No intentional behavior change.
Differential Revision: https://reviews.llvm.org/D110770
This commit is contained in:
parent
6714e1ce3b
commit
fa32fd3bf7
|
@ -253,6 +253,14 @@ public:
|
|||
/// or when using the -gen-reproducer driver flag.
|
||||
unsigned GenReproducer : 1;
|
||||
|
||||
// getFinalPhase - Determine which compilation mode we are in and record
|
||||
// which option we used to determine the final phase.
|
||||
// TODO: Much of what getFinalPhase returns are not actually true compiler
|
||||
// modes. Fold this functionality into Types::getCompilationPhases and
|
||||
// handleArguments.
|
||||
phases::ID getFinalPhase(const llvm::opt::DerivedArgList &DAL,
|
||||
llvm::opt::Arg **FinalPhaseArg = nullptr) const;
|
||||
|
||||
private:
|
||||
/// Certain options suppress the 'no input files' warning.
|
||||
unsigned SuppressMissingInputWarning : 1;
|
||||
|
@ -270,14 +278,6 @@ private:
|
|||
llvm::opt::DerivedArgList *
|
||||
TranslateInputArgs(const llvm::opt::InputArgList &Args) const;
|
||||
|
||||
// getFinalPhase - Determine which compilation mode we are in and record
|
||||
// which option we used to determine the final phase.
|
||||
// TODO: Much of what getFinalPhase returns are not actually true compiler
|
||||
// modes. Fold this functionality into Types::getCompilationPhases and
|
||||
// handleArguments.
|
||||
phases::ID getFinalPhase(const llvm::opt::DerivedArgList &DAL,
|
||||
llvm::opt::Arg **FinalPhaseArg = nullptr) const;
|
||||
|
||||
// handleArguments - All code related to claiming and printing diagnostics
|
||||
// related to arguments to the driver are done here.
|
||||
void handleArguments(Compilation &C, llvm::opt::DerivedArgList &Args,
|
||||
|
|
|
@ -22,11 +22,10 @@ namespace phases {
|
|||
Assemble,
|
||||
Link,
|
||||
IfsMerge,
|
||||
LastPhase = IfsMerge,
|
||||
};
|
||||
|
||||
enum {
|
||||
MaxNumberOfPhases = LastPhase + 1
|
||||
MaxNumberOfPhases = IfsMerge + 1
|
||||
};
|
||||
|
||||
const char *getPhaseName(ID Id);
|
||||
|
|
|
@ -111,7 +111,7 @@ namespace types {
|
|||
/// getCompilationPhases - Get the list of compilation phases ('Phases') to be
|
||||
/// done for type 'Id' up until including LastPhase.
|
||||
llvm::SmallVector<phases::ID, phases::MaxNumberOfPhases>
|
||||
getCompilationPhases(ID Id, phases::ID LastPhase = phases::LastPhase);
|
||||
getCompilationPhases(ID Id, phases::ID LastPhase = phases::IfsMerge);
|
||||
llvm::SmallVector<phases::ID, phases::MaxNumberOfPhases>
|
||||
getCompilationPhases(const clang::driver::Driver &Driver,
|
||||
llvm::opt::DerivedArgList &DAL, ID Id);
|
||||
|
|
|
@ -304,6 +304,9 @@ phases::ID Driver::getFinalPhase(const DerivedArgList &DAL,
|
|||
} else if ((PhaseArg = DAL.getLastArg(options::OPT_c))) {
|
||||
FinalPhase = phases::Assemble;
|
||||
|
||||
} else if ((PhaseArg = DAL.getLastArg(options::OPT_emit_interface_stubs))) {
|
||||
FinalPhase = phases::IfsMerge;
|
||||
|
||||
// Otherwise do everything.
|
||||
} else
|
||||
FinalPhase = phases::Link;
|
||||
|
@ -3841,7 +3844,7 @@ void Driver::BuildActions(Compilation &C, DerivedArgList &Args,
|
|||
if (Args.hasArg(options::OPT_emit_interface_stubs)) {
|
||||
auto PhaseList = types::getCompilationPhases(
|
||||
types::TY_IFS_CPP,
|
||||
Args.hasArg(options::OPT_c) ? phases::Compile : phases::LastPhase);
|
||||
Args.hasArg(options::OPT_c) ? phases::Compile : phases::IfsMerge);
|
||||
|
||||
ActionList MergerInputs;
|
||||
|
||||
|
|
|
@ -362,46 +362,7 @@ types::getCompilationPhases(ID Id, phases::ID LastPhase) {
|
|||
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.
|
||||
// -S runs the compiler in Assembly listing mode.
|
||||
if (Driver.CCCIsCPP() || DAL.getLastArg(options::OPT_E) ||
|
||||
DAL.getLastArg(options::OPT__SLASH_EP) ||
|
||||
DAL.getLastArg(options::OPT_M, options::OPT_MM) ||
|
||||
DAL.getLastArg(options::OPT__SLASH_P))
|
||||
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))
|
||||
LastPhase = phases::Precompile;
|
||||
|
||||
// -{fsyntax-only,-analyze,emit-ast} only run up to the compiler.
|
||||
else if (DAL.getLastArg(options::OPT_fsyntax_only) ||
|
||||
DAL.getLastArg(options::OPT_print_supported_cpus) ||
|
||||
DAL.getLastArg(options::OPT_module_file_info) ||
|
||||
DAL.getLastArg(options::OPT_verify_pch) ||
|
||||
DAL.getLastArg(options::OPT_rewrite_objc) ||
|
||||
DAL.getLastArg(options::OPT_rewrite_legacy_objc) ||
|
||||
DAL.getLastArg(options::OPT__migrate) ||
|
||||
DAL.getLastArg(options::OPT__analyze) ||
|
||||
DAL.getLastArg(options::OPT_emit_ast))
|
||||
LastPhase = phases::Compile;
|
||||
|
||||
else if (DAL.getLastArg(options::OPT_S) ||
|
||||
DAL.getLastArg(options::OPT_emit_llvm))
|
||||
LastPhase = phases::Backend;
|
||||
|
||||
else if (DAL.getLastArg(options::OPT_c))
|
||||
LastPhase = phases::Assemble;
|
||||
|
||||
// Generally means, do every phase until Link.
|
||||
else
|
||||
LastPhase = phases::LastPhase;
|
||||
|
||||
return types::getCompilationPhases(Id, LastPhase);
|
||||
return types::getCompilationPhases(Id, Driver.getFinalPhase(DAL));
|
||||
}
|
||||
|
||||
ID types::lookupCXXTypeForCType(ID Id) {
|
||||
|
|
Loading…
Reference in New Issue