From 471639b451d3c3dc29269f3df706bfc6f5e6b846 Mon Sep 17 00:00:00 2001 From: Shaikh Ubaid Date: Fri, 7 Apr 2023 06:05:28 +0530 Subject: [PATCH] Support LCOMPILERS_FAST_ALLOC #ifdef --- CMakeLists.txt | 8 ++++++++ src/libasr/alloc.h | 12 +++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fb1d163642..d51da30de2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -89,6 +89,9 @@ set(WITH_WHEREAMI yes set(WITH_ZLIB yes CACHE BOOL "Compile with ZLIB Library") +set(WITH_LCOMPILERS_FAST_ALLOC yes + CACHE BOOL "Compile with fast allocator") + # Build to wasm set(LPYTHON_BUILD_TO_WASM no CACHE BOOL "Compile LPython To WASM") @@ -97,6 +100,7 @@ if (LPYTHON_BUILD_TO_WASM) set(HAVE_BUILD_TO_WASM yes) SET(WITH_WHEREAMI no) SET(WITH_ZLIB no) + SET(WITH_LCOMPILERS_FAST_ALLOC no) add_definitions("-DHAVE_BUILD_TO_WASM=1") endif() @@ -112,6 +116,10 @@ if (WITH_ZLIB) find_package(StaticZLIB REQUIRED) endif() +if (WITH_LCOMPILERS_FAST_ALLOC) + add_definitions("-DLCOMPILERS_FAST_ALLOC=1") +endif() + # LLVM set(WITH_LLVM no CACHE BOOL "Build with LLVM support") set(WITH_TARGET_AARCH64 no CACHE BOOL "Enable target AARCH64") diff --git a/src/libasr/alloc.h b/src/libasr/alloc.h index 76588a2884..b618a84551 100644 --- a/src/libasr/alloc.h +++ b/src/libasr/alloc.h @@ -52,15 +52,25 @@ class Allocator // force new_chunk() not to get inlined, but there is no standard way of // doing it. This try/catch approach effectively achieves the same using // standard C++. +#ifdef LCOMPILERS_FAST_ALLOC try { +#endif LCOMPILERS_ASSERT(start != nullptr); size_t addr = current_pos; current_pos += align(s); - if (size_current() > size_total()) throw std::bad_alloc(); + if (size_current() > size_total()) { +#ifdef LCOMPILERS_FAST_ALLOC + throw std::bad_alloc(); +#else + return new_chunk(s); +#endif + } return (void*)addr; +#ifdef LCOMPILERS_FAST_ALLOC } catch (const std::bad_alloc &e) { return new_chunk(s); } +#endif } void *new_chunk(size_t s) {