mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Deallocate dynamic allocas done for metadata/wtable packs. These stackrestore calls are inserted on the dominance frontier and then stack nesting is fixed up. That was achieved as follows: Added a new IRGen pass PackMetadataMarkerInserter; it - determines if there are any instructions which might allocate on-stack pack metadata - if there aren't, no changes are made - if there are, alloc_pack_metadata just before instructions that could allocate pack metadata on the stack and dealloc_pack_metadata on the dominance frontier of those instructions - fixup stack nesting During IRGen, the allocations done for metadata/wtable packs are recorded and IRGenSILFunction associates them with the instruction that lowered. It must be the instruction after some alloc_pack_metadata instruction. Then, when visiting the dealloc_pack_metadata instructions corresponding to that alloc_pack_metadata, deallocate those packs.
26 lines
836 B
C++
26 lines
836 B
C++
//===--- IRGenSILPasses.h - The IRGen Prepare SIL Passes --------*- C++ -*-===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
|
|
// Licensed under Apache License v2.0 with Runtime Library Exception
|
|
//
|
|
// See https://swift.org/LICENSE.txt for license information
|
|
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
namespace swift {
|
|
|
|
class SILTransform;
|
|
|
|
namespace irgen {
|
|
|
|
/// Create a pass to hoist alloc_stack instructions with non-fixed size.
|
|
SILTransform *createAllocStackHoisting();
|
|
SILTransform *createLoadableByAddress();
|
|
SILTransform *createPackMetadataMarkerInserter();
|
|
|
|
} // end namespace irgen
|
|
} // end namespace swift
|