Upgrade to ena-0.13.1 and use the new inlined_probe_value
function.
This is a big speed win for `keccak` and `inflate`.
This commit is contained in:
parent
acf7d4dcdb
commit
3eae7f6291
4 changed files with 13 additions and 6 deletions
|
@ -910,9 +910,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ena"
|
name = "ena"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3dc01d68e08ca384955a3aeba9217102ca1aa85b6e168639bf27739f1d749d87"
|
checksum = "8944dc8fa28ce4a38f778bd46bf7d923fe73eed5a439398507246c8e017e6f36"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log",
|
"log",
|
||||||
]
|
]
|
||||||
|
|
|
@ -1609,20 +1609,21 @@ impl<'a, 'tcx> ShallowResolver<'a, 'tcx> {
|
||||||
use self::type_variable::TypeVariableValue;
|
use self::type_variable::TypeVariableValue;
|
||||||
|
|
||||||
// See the comment in `shallow_resolve()`.
|
// See the comment in `shallow_resolve()`.
|
||||||
match self.infcx.type_variables.borrow_mut().probe(v) {
|
match self.infcx.type_variables.borrow_mut().inlined_probe(v) {
|
||||||
TypeVariableValue::Known { value: t } => self.fold_ty(t) != typ,
|
TypeVariableValue::Known { value: t } => self.fold_ty(t) != typ,
|
||||||
TypeVariableValue::Unknown { .. } => false,
|
TypeVariableValue::Unknown { .. } => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ty::Infer(ty::IntVar(v)) => {
|
ty::Infer(ty::IntVar(v)) => {
|
||||||
match self.infcx.int_unification_table.borrow_mut().probe_value(v) {
|
match self.infcx.int_unification_table.borrow_mut().inlined_probe_value(v) {
|
||||||
Some(v) => v.to_type(self.infcx.tcx) != typ,
|
Some(v) => v.to_type(self.infcx.tcx) != typ,
|
||||||
None => false,
|
None => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ty::Infer(ty::FloatVar(v)) => {
|
ty::Infer(ty::FloatVar(v)) => {
|
||||||
|
// Not `inlined_probe_value(v)` because this call site is colder.
|
||||||
match self.infcx.float_unification_table.borrow_mut().probe_value(v) {
|
match self.infcx.float_unification_table.borrow_mut().probe_value(v) {
|
||||||
Some(v) => v.to_type(self.infcx.tcx) != typ,
|
Some(v) => v.to_type(self.infcx.tcx) != typ,
|
||||||
None => false,
|
None => false,
|
||||||
|
|
|
@ -234,7 +234,13 @@ impl<'tcx> TypeVariableTable<'tcx> {
|
||||||
/// Retrieves the type to which `vid` has been instantiated, if
|
/// Retrieves the type to which `vid` has been instantiated, if
|
||||||
/// any.
|
/// any.
|
||||||
pub fn probe(&mut self, vid: ty::TyVid) -> TypeVariableValue<'tcx> {
|
pub fn probe(&mut self, vid: ty::TyVid) -> TypeVariableValue<'tcx> {
|
||||||
self.eq_relations.probe_value(vid)
|
self.inlined_probe(vid)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// An always-inlined variant of `probe`, for very hot call sites.
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn inlined_probe(&mut self, vid: ty::TyVid) -> TypeVariableValue<'tcx> {
|
||||||
|
self.eq_relations.inlined_probe_value(vid)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// If `t` is a type-inference variable, and it has been
|
/// If `t` is a type-inference variable, and it has been
|
||||||
|
|
|
@ -10,7 +10,7 @@ path = "lib.rs"
|
||||||
doctest = false
|
doctest = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
ena = "0.13"
|
ena = "0.13.1"
|
||||||
indexmap = "1"
|
indexmap = "1"
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
jobserver_crate = { version = "0.1.13", package = "jobserver" }
|
jobserver_crate = { version = "0.1.13", package = "jobserver" }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue