hanchenye-llvm-project/llvm
Chandler Carruth 8b5a7419b8 [PM] Wire up optimization levels and default pipeline construction APIs
in the PassBuilder.

These are really just stubs for now, but they give a nice API surface
that Clang or other tools can start learning about and enabling for
experimentation.

I've also wired up parsing various synthetic module pass names to
generate these set pipelines. This allows the pipelines to be combined
with other passes and have their order controlled, with clear separation
between the *kind* of canned pipeline, and the *level* of optimization
to be used within that canned pipeline.

The most interesting part of this patch is almost certainly the spec for
the different optimization levels. I don't think we can ever have hard
and fast rules that would make it easy to determine whether a particular
optimization makes sense at a particular level -- it will always be in
large part a judgement call. But hopefully this will outline the
expected rationale that should be used, and the direction that the
pipelines should be taken. Much of this was based on a long llvm-dev
discussion I started years ago to try and crystalize the intent behind
these pipelines, and now, at long long last I'm returning to the task of
actually writing it down somewhere that we can cite and try to be
consistent with.

Differential Revision: http://reviews.llvm.org/D12826

llvm-svn: 262196
2016-02-28 22:16:03 +00:00
..
bindings Kill LLVMAddTargetData 2016-02-16 00:22:02 +00:00
cmake [CMAKE] Update build on recent Haiku 2016-02-26 17:01:45 +00:00
docs [libFuzzer] don't emit callbacks to sanitizer run-time in -fsanitize-coverage=trace-pc mode; update libFuzzer doc for previous commit 2016-02-27 05:45:12 +00:00
examples Remove autoconf support 2016-01-26 21:29:08 +00:00
include [PM] Wire up optimization levels and default pipeline construction APIs 2016-02-28 22:16:03 +00:00
lib [PM] Wire up optimization levels and default pipeline construction APIs 2016-02-28 22:16:03 +00:00
projects Remove autoconf support 2016-01-26 21:29:08 +00:00
resources
test [PM] Wire up optimization levels and default pipeline construction APIs 2016-02-28 22:16:03 +00:00
tools [sancov] print_coverage_points command. 2016-02-27 02:21:44 +00:00
unittests [ConstantRange] Add umin/smin operators 2016-02-26 22:08:18 +00:00
utils Revert r262092, caught LLD tests 2016-02-26 23:44:10 +00:00
.arcconfig
.clang-format
.clang-tidy
.gitignore
CMakeLists.txt [CMake] Allow LLVM_TARGETS_TO_BUILD to accept "Native" 2016-02-26 21:21:40 +00:00
CODE_OWNERS.TXT [docs] Remove references to autotools build. 2016-01-30 01:10:15 +00:00
CREDITS.TXT
LICENSE.TXT
LLVMBuild.txt
README.txt Revert previous test commit. 2016-01-04 19:13:29 +00:00
configure Remove autoconf support 2016-01-26 21:29:08 +00:00
llvm.spec.in

README.txt

Low Level Virtual Machine (LLVM)
================================

This directory and its subdirectories contain source code for LLVM,
a toolkit for the construction of highly optimized compilers,
optimizers, and runtime environments.

LLVM is open source software. You may freely distribute it under the terms of
the license agreement found in LICENSE.txt.

Please see the documentation provided in docs/ for further
assistance with LLVM, and in particular docs/GettingStarted.rst for getting
started with LLVM and docs/README.txt for an overview of LLVM's
documentation setup.

If you are writing a package for LLVM, see docs/Packaging.rst for our
suggestions.