e56b3691c8
We used to have concrete types in glue functions, but the way we used to implement that broke inlining of those functions. To fix that, we converted all glue to just take an i8* and always casted to that type. The problem with the old implementation was that we made a wrong assumption about the glue functions, taking it for granted that they always take an i8*, because that's the function type expected by the TyDesc fields. Therefore, we always ended up with some kind of cast. But actually, we can initially have the glue with concrete types and only cast the functions to the generic type once we actually emit the TyDesc data. That means that for glue calls that can be statically resolved, we don't need any casts, unless the glue uses a simplified type. In that case we cast the argument. And for glue calls that are resolved at runtime, we cast the argument to i8*, because that's what the glue function in the TyDesc expects. Since most of out glue calls are static, this saves a lot of bitcasts. The size of the unoptimized librustc.ll goes down by 240k lines. |
||
---|---|---|
.. | ||
compiletest | ||
driver | ||
etc | ||
libextra | ||
librust | ||
librustc | ||
librustdoc | ||
librusti | ||
librustpkg | ||
libstd | ||
libsyntax | ||
libuv@dfae9c3e95 | ||
llvm@2e9f0d21fe | ||
rt | ||
rustllvm | ||
test | ||
README.txt | ||
snapshots.txt |
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