diff options
| author | Björn Steinbrink <bsteinbr@gmail.com> | 2018-02-27 14:20:13 +0100 |
|---|---|---|
| committer | Björn Steinbrink <bsteinbr@gmail.com> | 2018-02-27 14:20:13 +0100 |
| commit | f05d9679d708ccd1a6a643838bbf3a64ccf271bf (patch) | |
| tree | adaae6d477aacd3fdebafc4eacc67d9e7a113db4 /src/libcore/slice | |
| parent | 29f5c699b11a6a148f097f82eaa05202f8799bbc (diff) | |
| download | rust-f05d9679d708ccd1a6a643838bbf3a64ccf271bf.tar.gz rust-f05d9679d708ccd1a6a643838bbf3a64ccf271bf.zip | |
Backport LLVM fixes for a JumpThreading / assume intrinsic bug
Diffstat (limited to 'src/libcore/slice')
| -rw-r--r-- | src/libcore/slice/mod.rs | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/src/libcore/slice/mod.rs b/src/libcore/slice/mod.rs index ac390313a67..aacbbd5058e 100644 --- a/src/libcore/slice/mod.rs +++ b/src/libcore/slice/mod.rs @@ -1246,18 +1246,15 @@ macro_rules! iterator { { // The addition might panic on overflow // Use the len of the slice to hint optimizer to remove result index bounds check. - let _n = make_slice!(self.ptr, self.end).len(); + let n = make_slice!(self.ptr, self.end).len(); self.try_fold(0, move |i, x| { if predicate(x) { Err(i) } else { Ok(i + 1) } }).err() - // // FIXME(#48116/#45964): - // // This assume() causes misoptimization on LLVM 6. - // // Commented out until it is fixed again. - // .map(|i| { - // unsafe { assume(i < n) }; - // i - // }) + .map(|i| { + unsafe { assume(i < n) }; + i + }) } #[inline] @@ -1274,13 +1271,10 @@ macro_rules! iterator { if predicate(x) { Err(i) } else { Ok(i) } }).err() - // // FIXME(#48116/#45964): - // // This assume() causes misoptimization on LLVM 6. - // // Commented out until it is fixed again. - // .map(|i| { - // unsafe { assume(i < n) }; - // i - // }) + .map(|i| { + unsafe { assume(i < n) }; + i + }) } } |
