diff options
author | Matthew Curtis <mcurtis@codeaurora.org> | 2013-03-07 12:32:26 +0000 |
---|---|---|
committer | Matthew Curtis <mcurtis@codeaurora.org> | 2013-03-07 12:32:26 +0000 |
commit | b9aa6739700d10e99da64cfa9b58ba7ca1c248e2 (patch) | |
tree | 5aaa5fe7408b5eb7c0d826b670229ce0fa635b15 /lib/Driver/Driver.cpp | |
parent | 9789d0d247d0bc1a06d1ea82c0630b427aa209c3 (diff) |
Minor refactor of how we get compilation phases.
There is now a single function to get the list of phases for a given
output Type.
No functionality change intended.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176628 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Driver/Driver.cpp')
-rw-r--r-- | lib/Driver/Driver.cpp | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp index 8229129055..652046fce4 100644 --- a/lib/Driver/Driver.cpp +++ b/lib/Driver/Driver.cpp @@ -1038,17 +1038,17 @@ void Driver::BuildActions(const ToolChain &TC, const DerivedArgList &Args, // Construct the actions to perform. ActionList LinkerInputs; ActionList SplitInputs; - unsigned NumSteps = 0; + llvm::SmallVector<phases::ID, phases::MaxNumberOfPhases> PL; for (unsigned i = 0, e = Inputs.size(); i != e; ++i) { types::ID InputType = Inputs[i].first; const Arg *InputArg = Inputs[i].second; - NumSteps = types::getNumCompilationPhases(InputType); - assert(NumSteps && "Invalid number of steps!"); + PL.clear(); + types::getCompilationPhases(InputType, PL); // If the first step comes after the final phase we are doing as part of // this compilation, warn the user about it. - phases::ID InitialPhase = types::getCompilationPhase(InputType, 0); + phases::ID InitialPhase = PL[0]; if (InitialPhase > FinalPhase) { // Claim here to avoid the more general unused warning. InputArg->claim(); @@ -1083,8 +1083,9 @@ void Driver::BuildActions(const ToolChain &TC, const DerivedArgList &Args, // Build the pipeline for this file. OwningPtr<Action> Current(new InputAction(*InputArg, InputType)); - for (unsigned i = 0; i != NumSteps; ++i) { - phases::ID Phase = types::getCompilationPhase(InputType, i); + for (llvm::SmallVector<phases::ID, phases::MaxNumberOfPhases>::iterator + i = PL.begin(), e = PL.end(); i != e; ++i) { + phases::ID Phase = *i; // We are done if this step is past what the user requested. if (Phase > FinalPhase) @@ -1092,7 +1093,7 @@ void Driver::BuildActions(const ToolChain &TC, const DerivedArgList &Args, // Queue linker inputs. if (Phase == phases::Link) { - assert(i + 1 == NumSteps && "linking must be final compilation step."); + assert((i + 1) == e && "linking must be final compilation step."); LinkerInputs.push_back(Current.take()); break; } @@ -1120,7 +1121,7 @@ void Driver::BuildActions(const ToolChain &TC, const DerivedArgList &Args, // If we are linking, claim any options which are obviously only used for // compilation. - if (FinalPhase == phases::Link && (NumSteps == 1)) + if (FinalPhase == phases::Link && PL.size() == 1) Args.ClaimAllArgs(options::OPT_CompileOnly_Group); } |