From b53c34f7b823e74eed970be80dcd5622cee9cd56 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Sun, 22 Oct 2023 08:43:57 +0200 Subject: [PATCH] avoid AtomicU64 when a Cell is enough --- src/tools/miri/src/clock.rs | 13 ++++++------- src/tools/miri/src/lib.rs | 1 + 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/tools/miri/src/clock.rs b/src/tools/miri/src/clock.rs index 24bf90f104ffd..fd0c121626b65 100644 --- a/src/tools/miri/src/clock.rs +++ b/src/tools/miri/src/clock.rs @@ -1,4 +1,4 @@ -use std::sync::atomic::{AtomicU64, Ordering}; +use std::cell::Cell; use std::time::{Duration, Instant as StdInstant}; /// When using a virtual clock, this defines how many nanoseconds we pretend are passing for each @@ -59,7 +59,7 @@ enum ClockKind { }, Virtual { /// The "current virtual time". - nanoseconds: AtomicU64, + nanoseconds: Cell, }, } @@ -82,7 +82,7 @@ impl Clock { // Time will pass without us doing anything. } ClockKind::Virtual { nanoseconds } => { - nanoseconds.fetch_add(NANOSECONDS_PER_BASIC_BLOCK, Ordering::SeqCst); + nanoseconds.update(|x| x + NANOSECONDS_PER_BASIC_BLOCK); } } } @@ -93,7 +93,8 @@ impl Clock { ClockKind::Host { .. } => std::thread::sleep(duration), ClockKind::Virtual { nanoseconds } => { // Just pretend that we have slept for some time. - nanoseconds.fetch_add(duration.as_nanos().try_into().unwrap(), Ordering::SeqCst); + let nanos: u64 = duration.as_nanos().try_into().unwrap(); + nanoseconds.update(|x| x + nanos); } } } @@ -110,9 +111,7 @@ impl Clock { match &self.kind { ClockKind::Host { .. } => Instant { kind: InstantKind::Host(StdInstant::now()) }, ClockKind::Virtual { nanoseconds } => - Instant { - kind: InstantKind::Virtual { nanoseconds: nanoseconds.load(Ordering::SeqCst) }, - }, + Instant { kind: InstantKind::Virtual { nanoseconds: nanoseconds.get() } }, } } } diff --git a/src/tools/miri/src/lib.rs b/src/tools/miri/src/lib.rs index 68b9164dec0dd..b12aae6d4148c 100644 --- a/src/tools/miri/src/lib.rs +++ b/src/tools/miri/src/lib.rs @@ -1,4 +1,5 @@ #![feature(rustc_private)] +#![feature(cell_update)] #![feature(float_gamma)] #![feature(map_try_insert)] #![feature(never_type)]