rust/src/rustllvm
Nikita Popov a5c3956a75 Don't add extra passes into the function pass manager
Exception for specific cases like linting, additional passes should
be going into the module pass manager (even if they are function
passes). The separate function pass manager is only used for very
early optimization passes.

Rather than apparending passes to the MPM, use the OptimizerLast
and EnabledOnOptLevel0 pass manager builder extension hooks, which
allow adding passes directly before finalization (alias
canonicalization and name-anon-globals).

The main effect and purpose of this change is to add sanitizer
passes at the end of the pipeline, which is where they belong.
In LLVM 9 the address sanitizer can't be used as a pass in the
early function pass manager, because it has a dependence on a
module-level analysis pass.
2019-07-15 09:45:14 +02:00
..
.editorconfig Add .editorconfig to src/rustllvm 2017-06-30 23:13:40 +03:00
ArchiveWrapper.cpp rustc: Start implementing compat with LLVM 9 2019-04-05 08:10:18 -07:00
Linker.cpp Remove licenses 2018-12-25 21:08:33 -07:00
PassWrapper.cpp Don't add extra passes into the function pass manager 2019-07-15 09:45:14 +02:00
README audit LLVM C++ types in ArchiveWrapper and PassWrapper 2016-08-03 15:08:47 +03:00
rustllvm.h Implement ffi_returns_twice attribute 2019-02-23 15:48:40 +01:00
RustWrapper.cpp Pass type to byval attributes 2019-07-09 21:55:29 +02:00

This directory currently contains some LLVM support code. This will generally
be sent upstream to LLVM in time; for now it lives here.

NOTE: the LLVM C++ ABI is subject to between-version breakage and must *never*
be exposed to Rust. To allow for easy auditing of that, all Rust-exposed types
must be typedef-ed as "LLVMXyz", or "LLVMRustXyz" if they were defined here.

Functions that return a failure status and leave the error in
the LLVM last error should return an LLVMRustResult rather than an
int or anything to avoid confusion.

When translating enums, add a single `Other` variant as the first
one to allow for new variants to be added. It should abort when used
as an input.

All other types must not be typedef-ed as such.