core: Add compile-time feature to disable escape analysis #492

Merged
sb10q merged 1 commits from enhance/buildtime-disable-escape-analysis into master 2024-08-14 09:29:48 +08:00
4 changed files with 24 additions and 13 deletions

View File

@ -24,3 +24,4 @@ features = ["llvm14-0", "target-x86", "target-arm", "target-riscv", "no-libffi-l
[features] [features]
init-llvm-profile = [] init-llvm-profile = []
no-escape-analysis = ["nac3core/no-escape-analysis"]

View File

@ -4,6 +4,9 @@ version = "0.1.0"
authors = ["M-Labs"] authors = ["M-Labs"]
edition = "2021" edition = "2021"
[features]
no-escape-analysis = []
[dependencies] [dependencies]
itertools = "0.13" itertools = "0.13"
crossbeam = "0.8" crossbeam = "0.8"

View File

@ -212,19 +212,23 @@ impl<'a> Inferencer<'a> {
/// This is a workaround preventing the caller from using a variable `alloca`-ed in the body, which /// This is a workaround preventing the caller from using a variable `alloca`-ed in the body, which
/// is freed when the function returns. /// is freed when the function returns.
fn check_return_value_ty(&mut self, ret_ty: Type) -> bool { fn check_return_value_ty(&mut self, ret_ty: Type) -> bool {
match &*self.unifier.get_ty_immutable(ret_ty) { if cfg!(feature = "no-escape-analysis") {
TypeEnum::TObj { .. } => [ true
self.primitives.int32, } else {
self.primitives.int64, match &*self.unifier.get_ty_immutable(ret_ty) {
self.primitives.uint32, TypeEnum::TObj { .. } => [
self.primitives.uint64, self.primitives.int32,
self.primitives.float, self.primitives.int64,
self.primitives.bool, self.primitives.uint32,
] self.primitives.uint64,
.iter() self.primitives.float,
.any(|allowed_ty| self.unifier.unioned(ret_ty, *allowed_ty)), self.primitives.bool,
TypeEnum::TTuple { ty, .. } => ty.iter().all(|t| self.check_return_value_ty(*t)), ]
_ => false, .iter()
.any(|allowed_ty| self.unifier.unioned(ret_ty, *allowed_ty)),
TypeEnum::TTuple { ty, .. } => ty.iter().all(|t| self.check_return_value_ty(*t)),
_ => false,
}
} }
} }

View File

@ -4,6 +4,9 @@ version = "0.1.0"
authors = ["M-Labs"] authors = ["M-Labs"]
edition = "2021" edition = "2021"
[features]
no-escape-analysis = ["nac3core/no-escape-analysis"]
[dependencies] [dependencies]
parking_lot = "0.12" parking_lot = "0.12"
nac3parser = { path = "../nac3parser" } nac3parser = { path = "../nac3parser" }