llvm-project/clang/lib/Frontend
Chandler Carruth 50f9e893f2 [PM] Introduce options to enable the (still experimental) new pass
manager, and a code path to use it.

The option is actually a top-level option but does contain
'experimental' in the name. This is the compromise suggested by Richard
in discussions. We expect this option will be around long enough and
have enough users towards the end that it merits not being relegated to
CC1, but it still needs to be clear that this option will go away at
some point.

The backend code is a fresh codepath dedicated to handling the flow with
the new pass manager. This was also Richard's suggested code structuring
to essentially leave a clean path for development rather than carrying
complexity or idiosyncracies of how we do things just to share code with
the parts of this in common with the legacy pass manager. And it turns
out, not much is really in common even though we use the legacy pass
manager for codegen at this point.

I've switched a couple of tests to run with the new pass manager, and
they appear to work. There are still plenty of bugs that need squashing
(just with basic experiments I've found two already!) but they aren't in
this code, and the whole point is to expose the necessary hooks to start
experimenting with the pass manager in more realistic scenarios.

That said, I want to *strongly caution* anyone itching to play with
this: it is still *very shaky*. Several large components have not yet
been shaken down. For example I have bugs in both the always inliner and
inliner that I have already spotted and will be fixing independently.

Still, this is a fun milestone. =D

One thing not in this patch (but that might be very reasonable to add)
is some level of support for raw textual pass pipelines such as what
Sean had a patch for some time ago. I'm mostly interested in the more
traditional flow of getting the IR out of Clang and then running it
through opt, but I can see other use cases so someone may want to add
it.

And of course, *many* features are not yet supported!
- O1 is currently more like O2
- None of the sanitizers are wired up
- ObjC ARC optimizer isn't wired up
- ...

So plenty of stuff still lef to do!

Differential Revision: https://reviews.llvm.org/D28077

llvm-svn: 290450
2016-12-23 20:44:01 +00:00
..
Rewrite getObjCEncodingForMethodDecl cannot fail. Simplify. NFC. 2016-11-29 21:57:00 +00:00
ASTConsumers.cpp [NFC] Header cleanup 2016-07-18 19:02:11 +00:00
ASTMerge.cpp [Frontend] Make the memory management of FrontendAction pointers explicit by using unique_ptr. 2016-02-07 19:28:36 +00:00
ASTUnit.cpp [VFS] Replace TimeValue usage with std::chrono 2016-11-09 10:52:22 +00:00
CMakeLists.txt clangFrontend: Make intrinsics_gen optional for standalone build. 2016-06-02 20:24:07 +00:00
CacheTokens.cpp Fix the build with MSVC 2013 after r283856 2016-10-11 17:24:09 +00:00
ChainedDiagnosticConsumer.cpp
ChainedIncludesSource.cpp Refactor to remove the assumption that we know the name of the module we're emitting at the point when we create a PCHGenerator (with the C++ modules TS, we find that out part way through parsing the input). 2016-08-25 18:26:30 +00:00
CodeGenOptions.cpp revert SVN r265702, r265640 2016-04-08 16:52:00 +00:00
CompilerInstance.cpp [CrashReproducer] Add support for merging -ivfsoverlay 2016-12-22 07:06:03 +00:00
CompilerInvocation.cpp [PM] Introduce options to enable the (still experimental) new pass 2016-12-23 20:44:01 +00:00
CreateInvocationFromCommandLine.cpp [CUDA][OpenMP] Create generic offload action 2016-07-15 23:13:27 +00:00
DependencyFile.cpp Rangify for loops, NFC. 2016-11-16 19:24:10 +00:00
DependencyGraph.cpp Revert r240270 ("Fixed/added namespace ending comments using clang-tidy"). 2015-06-22 23:07:51 +00:00
DiagnosticRenderer.cpp [NFC] Header cleanup 2016-07-18 19:02:11 +00:00
FrontendAction.cpp [Frontend] Use vfs for directory iteration while searching PCHs. NFCI 2016-12-12 19:28:21 +00:00
FrontendActions.cpp Revert "[Modules] Make header inclusion order from umbrella dirs deterministic" 2016-12-12 23:22:30 +00:00
FrontendOptions.cpp C++ Modules TS: add frontend support for building pcm files from module 2016-08-26 00:14:38 +00:00
HeaderIncludeGen.cpp [Frontend] StringRefize and fix bad indentation. 2016-05-27 12:52:19 +00:00
InitHeaderSearch.cpp [Frontend] Fix an issue where a quoted search path is incorrectly 2016-12-02 09:51:51 +00:00
InitPreprocessor.cpp Add __cpp_structured_bindings feature test macro for structured bindings, per 2016-12-19 04:21:36 +00:00
LangStandards.cpp [C++11] Use 'nullptr'. Frontend edition. 2014-05-22 04:46:25 +00:00
LayoutOverrideSource.cpp Annotate dump() methods with LLVM_DUMP_METHOD, addressing Richard Smith r259192 post commit comment. 2016-01-29 19:38:18 +00:00
LogDiagnosticPrinter.cpp Replace double negation of !FileID.isInvalid() with FileID.isValid(). 2015-10-03 10:46:20 +00:00
ModuleDependencyCollector.cpp [CrashReproducer] Add support for merging -ivfsoverlay 2016-12-22 07:06:03 +00:00
MultiplexConsumer.cpp PR29097: add an update record when we instantiate the default member 2016-08-24 21:25:37 +00:00
PCHContainerOperations.cpp Bitcode: Decouple block info block state from reader. 2016-11-08 04:17:11 +00:00
PrintPreprocessedOutput.cpp [Preprocessor] Support for '-dI' flag 2016-11-17 22:45:31 +00:00
SerializedDiagnosticPrinter.cpp Bitcode: Simplify BitstreamWriter::EnterBlockInfoBlock() interface. 2016-11-01 01:18:57 +00:00
SerializedDiagnosticReader.cpp Bitcode: Decouple block info block state from reader. 2016-11-08 04:17:11 +00:00
TestModuleFileExtension.cpp Use arrays or initializer lists to feed ArrayRefs instead of SmallVector where possible. 2016-07-02 11:41:41 +00:00
TestModuleFileExtension.h Module file extensions: pass a Sema through to the extension writer. 2015-12-08 22:43:32 +00:00
TextDiagnostic.cpp Move UTF functions into namespace llvm. 2016-09-30 00:38:45 +00:00
TextDiagnosticBuffer.cpp Replace push_back(Constructor(foo)) with emplace_back(foo) for non-trivial types 2015-05-29 19:42:19 +00:00
TextDiagnosticPrinter.cpp [NFC] Header cleanup 2016-07-18 19:02:11 +00:00
VerifyDiagnosticConsumer.cpp Instead of resetting the pointer, or releasing it which was the previous 2016-11-03 18:03:14 +00:00