rust/src
bors aa1d4ef55a auto merge of #9032 : alexcrichton/rust/inline-repr, r=thestinger
This allows cross-crate inlining which is *very* good because this is called a
lot throughout libstd (even when libstd is inlined across crates).

In one of my projects, I have a test case with the following performance characteristics

commit | optimization level | runtime (seconds)
----|------|----
before | O2  | 22s
before | O3  | 107s
after | O2  | 13s
after | O3  | 12s

I'm a bit disturbed by the 107s runtime from O3 before this commit. The performance characteristics of this test involve doing an absurd amount of small operations. A huge portion of this is creating hashmaps which involves allocating vectors.

The worst portions of the profile are:
![screen shot 2013-09-06 at 10 32 15 pm](https://f.cloud.github.com/assets/64996/1100723/e5e8744c-177e-11e3-83fc-ddc5f18c60f9.png)

Which as you can see looks like some *serious* problems with inlining. I would expect the hash map methods to be high up in the profile, but the top 9 callers of `cast::transmute_copy` were `Repr::repr`'s various monomorphized instances.

I wish there we a better way to detect things like this in the future, and it's unfortunate that this is required for performance in the first place. I suppose I'm not entirely sure why this is needed because all of the methods should have been generated in-crate (monomorphized versions of library functions), so they should have gotten inlined? It also could just be that by modifying LLVM's idea of the inline cost of this function it was able to inline it in many more locations.
2013-09-07 09:31:12 -07:00
..
compiletest Rename str::from_bytes to str::from_utf8, closes #8985 2013-09-05 14:17:24 +02:00
driver Bring compiletest/rustpkg/driver up to date on std vs core 2013-07-04 16:30:48 -07:00
etc stop treating char as an integer type 2013-09-04 08:07:56 -04:00
gyp@f407f09c94 Upgrade libuv to the current master (again) 2013-09-06 11:12:49 -07:00
libextra auto merge of #9026 : jbclements/rust/let-var-hygiene, r=jbclements 2013-09-06 23:35:57 -07:00
librust Update clients of path.rs to use new API. 2013-09-04 13:10:32 +02:00
librustc ident->name in debuginfo 2013-09-06 23:19:11 -07:00
librustdoc Rename str::from_bytes to str::from_utf8, closes #8985 2013-09-05 14:17:24 +02:00
librusti Modernized a few more types in syntax::ast 2013-09-03 14:45:06 +02:00
librustpkg Rename str::from_bytes to str::from_utf8, closes #8985 2013-09-05 14:17:24 +02:00
libstd auto merge of #9032 : alexcrichton/rust/inline-repr, r=thestinger 2013-09-07 09:31:12 -07:00
libsyntax added index to test cases, more debugging output 2013-09-06 13:35:14 -07:00
libuv@d88cf5652a Upgrade libuv to the current master (again) 2013-09-06 11:12:49 -07:00
llvm@08a3bd96ee Enable segmented stacks for llvm on mingw-64 2013-08-28 20:44:46 -07:00
rt Upgrade libuv to the current master (again) 2013-09-06 11:12:49 -07:00
rustllvm debuginfo: Added test cases for structs, tuples, enums, etc passed by value. 2013-09-04 18:38:46 +02:00
test add hygiene test, add copyright to another 2013-09-06 13:35:14 -07:00
README.txt Update doc references to new names for std, extra, and std::libc 2013-06-16 23:26:08 -07:00
snapshots.txt register new snapshots 2013-08-14 18:45:51 -07:00

This is a preliminary version of the Rust compiler, libraries and tools

Source layout:

librustc/          The self-hosted compiler

libstd/            The standard library (imported and linked by default)
libextra/          The "extras" library (slightly more peripheral code)
libsyntax/         The Rust parser and pretty-printer

rt/                The runtime system
rt/rust_*.cpp      - The majority of the runtime services
rt/isaac           - The PRNG used for pseudo-random choices in the runtime
rt/bigint          - The bigint library used for the 'big' type
rt/uthash          - Small hashtable-and-list library for C, used in runtime
rt/sync            - Concurrency utils
rt/util            - Small utility classes for the runtime.
rt/vg              - Valgrind headers
rt/msvc            - MSVC support
rt/linenoise       - a readline-like line editing library

test/              Testsuite
test/compile-fail  - Tests that should fail to compile
test/run-fail      - Tests that should compile, run and fail
test/run-pass      - Tests that should compile, run and succeed
test/bench         - Benchmarks and miscellanea
test/pretty        - Pretty-printer tests
test/auxiliary     - Dependencies of tests

compiletest/       The test runner

librustpkg/        The package manager and build system

librusti/          The JIT REPL

librustdoc/        The Rust API documentation tool

llvm/              The LLVM submodule

libuv/             The libuv submodule

rustllvm/          LLVM support code

libfuzzer/         A collection of fuzz testers

etc/               Scripts, editor support, misc