Skip to content

Commit

Permalink
Unrolled build for rust-lang#137360
Browse files Browse the repository at this point in the history
Rollup merge of rust-lang#137360 - real-eren:rustc_span/use-chunks-exact, r=Noratrieb

Use `as_chunks` in `analyze_source_file_sse2`

Follow-up to rust-lang#136460. Uses a slightly cleaner method of iterating over chunks of bytes.
  • Loading branch information
rust-timer authored Feb 25, 2025
2 parents c51b9b6 + 62f5a55 commit c60539b
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 7 deletions.
11 changes: 4 additions & 7 deletions compiler/rustc_span/src/analyze_source_file.rs
Original file line number Diff line number Diff line change
Expand Up @@ -68,21 +68,18 @@ cfg_match! {

const CHUNK_SIZE: usize = 16;

let src_bytes = src.as_bytes();

let chunk_count = src.len() / CHUNK_SIZE;
let (chunks, tail) = src.as_bytes().as_chunks::<CHUNK_SIZE>();

// This variable keeps track of where we should start decoding a
// chunk. If a multi-byte character spans across chunk boundaries,
// we need to skip that part in the next chunk because we already
// handled it.
let mut intra_chunk_offset = 0;

for chunk_index in 0..chunk_count {
let ptr = src_bytes.as_ptr() as *const __m128i;
for (chunk_index, chunk) in chunks.iter().enumerate() {
// We don't know if the pointer is aligned to 16 bytes, so we
// use `loadu`, which supports unaligned loading.
let chunk = unsafe { _mm_loadu_si128(ptr.add(chunk_index)) };
let chunk = unsafe { _mm_loadu_si128(chunk.as_ptr() as *const __m128i) };

// For character in the chunk, see if its byte value is < 0, which
// indicates that it's part of a UTF-8 char.
Expand Down Expand Up @@ -123,7 +120,7 @@ cfg_match! {
}

// There might still be a tail left to analyze
let tail_start = chunk_count * CHUNK_SIZE + intra_chunk_offset;
let tail_start = src.len() - tail.len() + intra_chunk_offset;
if tail_start < src.len() {
analyze_source_file_generic(
&src[tail_start..],
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_span/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
#![feature(round_char_boundary)]
#![feature(rustc_attrs)]
#![feature(rustdoc_internals)]
#![feature(slice_as_chunks)]
#![warn(unreachable_pub)]
// tidy-alphabetical-end

Expand Down

0 comments on commit c60539b

Please sign in to comment.