<feed xmlns='http://www.w3.org/2005/Atom'>
<title>rust/src/rustllvm/RustWrapper.cpp, branch 1.5.0</title>
<subtitle>https://github.com/rust-lang/rust
</subtitle>
<id>http://git.dreamy.place/mirrors/rust/atom?h=1.5.0</id>
<link rel='self' href='http://git.dreamy.place/mirrors/rust/atom?h=1.5.0'/>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/'/>
<updated>2015-10-24T09:42:23+00:00</updated>
<entry>
<title>rustllvm: Update to LLVM trunk</title>
<updated>2015-10-24T09:42:23+00:00</updated>
<author>
<name>Seo Sanghyeon</name>
<email>sanxiyn@gmail.com</email>
</author>
<published>2015-10-24T09:42:23+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=b285f9202590050a7b480a99a074673630b11f4f'/>
<id>urn:sha1:b285f9202590050a7b480a99a074673630b11f4f</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Tweak Travis to use GCE</title>
<updated>2015-09-29T23:56:35+00:00</updated>
<author>
<name>Alex Crichton</name>
<email>alex@alexcrichton.com</email>
</author>
<published>2015-09-18T17:19:23+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=27dd6dd3dbe92debaac7d54c8405a3d3af1c4daf'/>
<id>urn:sha1:27dd6dd3dbe92debaac7d54c8405a3d3af1c4daf</id>
<content type='text'>
Travis CI has new infrastructure using the Google Compute Engine which has both
faster CPUs and more memory, and we've been encouraged to switch as it should
help our build times! The only downside currently, however, is that IPv6 is
disabled, causing a number of standard library tests to fail.

Consequently this commit tweaks our travis config in a few ways:

* ccache is disabled as it's not working on GCE just yet
* Docker is used to run tests inside which reportedly will get IPv6 working
* A system LLVM installation is used instead of building LLVM itself. This is
  primarily done to reduce build times, but we want automation for this sort of
  behavior anyway and we can extend this in the future with building from source
  as well if needed.
* gcc-specific logic is removed as the docker image for Ubuntu gives us a
  recent-enough gcc by default.
</content>
</entry>
<entry>
<title>trans: Move rust_try into the compiler</title>
<updated>2015-07-21T23:08:11+00:00</updated>
<author>
<name>Alex Crichton</name>
<email>alex@alexcrichton.com</email>
</author>
<published>2015-07-20T20:27:38+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=c35b2bd226736925961ca6853b2ef29e8094cd90'/>
<id>urn:sha1:c35b2bd226736925961ca6853b2ef29e8094cd90</id>
<content type='text'>
This commit moves the IR files in the distribution, rust_try.ll,
rust_try_msvc_64.ll, and rust_try_msvc_32.ll into the compiler from the main
distribution. There's a few reasons for this change:

* LLVM changes its IR syntax from time to time, so it's very difficult to
  have these files build across many LLVM versions simultaneously. We'll likely
  want to retain this ability for quite some time into the future.
* The implementation of these files is closely tied to the compiler and runtime
  itself, so it makes sense to fold it into a location which can do more
  platform-specific checks for various implementation details (such as MSVC 32
  vs 64-bit).
* This removes LLVM as a build-time dependency of the standard library. This may
  end up becoming very useful if we move towards building the standard library
  with Cargo.

In the immediate future, however, this commit should restore compatibility with
LLVM 3.5 and 3.6.
</content>
</entry>
<entry>
<title>rustc_trans: Update LLVMBuildLandingPad signature</title>
<updated>2015-07-17T03:25:51+00:00</updated>
<author>
<name>Alex Crichton</name>
<email>alex@alexcrichton.com</email>
</author>
<published>2015-06-30T15:56:56+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=7f0e733f1d8e597faee4bff0fc04838867725fad'/>
<id>urn:sha1:7f0e733f1d8e597faee4bff0fc04838867725fad</id>
<content type='text'>
The C API of this function changed so it no longer takes a personality function.
A shim was introduced to call the right LLVM function (depending on which
version we're compiled against) to set the personality function on the outer
function.

The compiler only ever sets one personality function for all generated
functions, so this should be equivalent.
</content>
</entry>
<entry>
<title>trans: Use LLVM's writeArchive to modify archives</title>
<updated>2015-07-10T16:06:21+00:00</updated>
<author>
<name>Alex Crichton</name>
<email>alex@alexcrichton.com</email>
</author>
<published>2015-07-09T07:14:20+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=4a824275b9b057f43a7dbab84583ad7c2a1a2e63'/>
<id>urn:sha1:4a824275b9b057f43a7dbab84583ad7c2a1a2e63</id>
<content type='text'>
We have previously always relied upon an external tool, `ar`, to modify archives
that the compiler produces (staticlibs, rlibs, etc). This approach, however, has
a number of downsides:

* Spawning a process is relatively expensive for small compilations
* Encoding arguments across process boundaries often incurs unnecessary overhead
  or lossiness. For example `ar` has a tough time dealing with files that have
  the same name in archives, and the compiler copies many files around to ensure
  they can be passed to `ar` in a reasonable fashion.
* Most `ar` programs found do **not** have the ability to target arbitrary
  platforms, so this is an extra tool which needs to be found/specified when
  cross compiling.

The LLVM project has had a tool called `llvm-ar` for quite some time now, but it
wasn't available in the standard LLVM libraries (it was just a standalone
program). Recently, however, in LLVM 3.7, this functionality has been moved to a
library and is now accessible by consumers of LLVM via the `writeArchive`
function.

This commit migrates our archive bindings to no longer invoke `ar` by default
but instead make a library call to LLVM to do various operations. This solves
all of the downsides listed above:

* Archive management is now much faster, for example creating a "hello world"
  staticlib is now 6x faster (50ms =&gt; 8ms). Linking dynamic libraries also
  recently started requiring modification of rlibs, and linking a hello world
  dynamic library is now 2x faster.
* The compiler is now one step closer to "hassle free" cross compilation because
  no external tool is needed for managing archives, LLVM does the right thing!

This commit does not remove support for calling a system `ar` utility currently.
We will continue to maintain compatibility with LLVM 3.5 and 3.6 looking forward
(so the system LLVM can be used wherever possible), and in these cases we must
shell out to a system utility. All nightly builds of Rust, however, will stop
needing a system `ar`.
</content>
</entry>
<entry>
<title>rustc: Update LLVM</title>
<updated>2015-06-17T05:56:42+00:00</updated>
<author>
<name>Alex Crichton</name>
<email>alex@alexcrichton.com</email>
</author>
<published>2015-05-14T19:10:43+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=f9d4149c29e8b989fa3624993be379f380e48dcf'/>
<id>urn:sha1:f9d4149c29e8b989fa3624993be379f380e48dcf</id>
<content type='text'>
This commit updates the LLVM submodule in use to the current HEAD of the LLVM
repository. This is primarily being done to start picking up unwinding support
for MSVC, which is currently unimplemented in the revision of LLVM we are using.
Along the way a few changes had to be made:

* As usual, lots of C++ debuginfo bindings in LLVM changed, so there were some
  significant changes to our RustWrapper.cpp
* As usual, some pass management changed in LLVM, so clang was re-scrutinized to
  ensure that we're doing the same thing as clang.
* Some optimization options are now passed directly into the
  `PassManagerBuilder` instead of through CLI switches to LLVM.
* The `NoFramePointerElim` option was removed from LLVM, favoring instead the
  `no-frame-pointer-elim` function attribute instead.

Additionally, LLVM has picked up some new optimizations which required fixing an
existing soundness hole in the IR we generate. It appears that the current LLVM
we use does not expose this hole. When an enum is moved, the previous slot in
memory is overwritten with a bit pattern corresponding to "dropped". When the
drop glue for this slot is run, however, the switch on the discriminant can
often start executing the `unreachable` block of the switch due to the
discriminant now being outside the normal range. This was patched over locally
for now by having the `unreachable` block just change to a `ret void`.
</content>
</entry>
<entry>
<title>rustc_trans: don't hardcode llvm version for conditional intrinsics</title>
<updated>2015-06-08T02:47:00+00:00</updated>
<author>
<name>Luca Bruno</name>
<email>lucab@debian.org</email>
</author>
<published>2015-01-24T11:00:35+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=ce32f6412e1937c0844aa48e5b4e876b96dcd66d'/>
<id>urn:sha1:ce32f6412e1937c0844aa48e5b4e876b96dcd66d</id>
<content type='text'>
This commit introduce a third parameter for compatible_ifn!, as new
intrinsics are being added in recent LLVM releases and there is no
need to hardcode a specific case.

Signed-off-by: Luca Bruno &lt;lucab@debian.org&gt;
</content>
</entry>
<entry>
<title>Remove useless `const`</title>
<updated>2015-06-08T02:43:21+00:00</updated>
<author>
<name>Tamir Duberstein</name>
<email>tamird@gmail.com</email>
</author>
<published>2015-05-30T13:50:12+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=1be9e6f055fbcd6bfcf0a1f9e9ef0e86abe54f02'/>
<id>urn:sha1:1be9e6f055fbcd6bfcf0a1f9e9ef0e86abe54f02</id>
<content type='text'>
</content>
</entry>
<entry>
<title>rustc_llvm: Don't export constants across dlls</title>
<updated>2015-05-19T17:53:07+00:00</updated>
<author>
<name>Alex Crichton</name>
<email>alex@alexcrichton.com</email>
</author>
<published>2015-05-12T04:07:38+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=847c8520b14e3ae9aec26a33f70750a071d3f18d'/>
<id>urn:sha1:847c8520b14e3ae9aec26a33f70750a071d3f18d</id>
<content type='text'>
For imports of constants across DLLs to work on Windows it *requires* that the
import be marked with `dllimport` (unlike functions where the marker is
optional, but strongly recommended). This currently isn't working for importing
FFI constants across boundaries, however, so the one constant exported from
`rustc_llvm.dll` is now a function to be called instead.
</content>
</entry>
<entry>
<title>rustc_llvm: Expose setting more DLL storage classes</title>
<updated>2015-05-12T21:50:36+00:00</updated>
<author>
<name>Alex Crichton</name>
<email>alex@alexcrichton.com</email>
</author>
<published>2015-05-11T19:24:12+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=40570eb49eb1cb688637cb58d14cdb9664ea1039'/>
<id>urn:sha1:40570eb49eb1cb688637cb58d14cdb9664ea1039</id>
<content type='text'>
Currently only `dllexport` is used, but more integration will require using
`dllimport` as well.
</content>
</entry>
</feed>
