//===- subzero/src/IceMemory.cpp - Memory management definitions -*- C++ -*-==// // // The Subzero Code Generator // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// /// /// \file /// \brief Implements memory management related routines for subzero. ///// //===----------------------------------------------------------------------===// #include "IceMemory.h" #include "IceCfg.h" #include "IceLiveness.h" #include "IceTLS.h" #include <cassert> #include <utility> namespace Ice { ICE_TLS_DEFINE_FIELD(ArenaAllocator *, CfgAllocatorTraits, CfgAllocator); CfgAllocatorTraits::allocator_type CfgAllocatorTraits::current() { return ICE_TLS_GET_FIELD(CfgAllocator); } void CfgAllocatorTraits::set_current(const manager_type *Manager) { ArenaAllocator *Allocator = Manager == nullptr ? nullptr : Manager->Allocator.get(); set_current(Allocator); } void CfgAllocatorTraits::set_current(ArenaAllocator *Allocator) { ICE_TLS_SET_FIELD(CfgAllocator, Allocator); } void CfgAllocatorTraits::set_current(std::nullptr_t) { ICE_TLS_SET_FIELD(CfgAllocator, nullptr); } ICE_TLS_DEFINE_FIELD(ArenaAllocator *, LivenessAllocatorTraits, LivenessAllocator); LivenessAllocatorTraits::allocator_type LivenessAllocatorTraits::current() { return ICE_TLS_GET_FIELD(LivenessAllocator); } void LivenessAllocatorTraits::set_current(const manager_type *Manager) { ArenaAllocator *Allocator = Manager == nullptr ? nullptr : Manager->getAllocator(); ICE_TLS_SET_FIELD(LivenessAllocator, Allocator); } } // end of namespace Ice