Files
swift-mirror/lib/SILAnalysis/RCStateTransition.def
Michael Gottesman d808d6a7df [g-arc-opts] Extract out the definition of RCStateTransitionKind into a .def file.
This is apart of the work to change ARC so that all of the dataflow operations
are delegated to visitors which allow for behavior to be specialized depending
on the transformation kind. This will allow for users to add new behavior to the
ARC optimizer will minimally touching the actual dataflow.

Swift SVN r26777
2015-03-31 20:26:58 +00:00

78 lines
2.3 KiB
C++

//===--- RCStateTransition.def -------------------------------*- C++ -*----===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
//
// Declarations for metaprogramming with RCStateTransitionKind.
//
//===----------------------------------------------------------------------===//
/// KIND(X)
/// This represents a specific kind of RCStateTransitionKind equivalence class
/// that attempts to describe the effect of an operation on a ref count. Some
/// ways that this can happen are:
///
/// 1. The introduction of a new strong ref count. (StrongEntrance)
/// 2. The incrementing of a strong ref count. (StrongIncrement)
/// 3. The decrementing of a strong ref count. (StrongDecrement)
#ifndef KIND
#define KIND(K)
#endif
/// ABSTRACT_VALUE(Name, Start, End)
///
/// This enables one to form a grouping of Kinds that represent an abstract
/// operation. Some examples of this include:
///
/// 1. End Points
/// 2. Mutators.
///
/// It is specified by the range of instructions in between Start and End.
#ifndef ABSTRACT_VALUE
#define ABSTRACT_VALUE(Name, Start, End)
#endif
///-------
/// Misc |
///-------
///
/// An unknown kind.
KIND(Unknown)
/// An autorelease pool call.
KIND(AutoreleasePoolCall)
///-------------
/// End Points |
///-------------
/// The introduction of a strong reference count. This can go on SILArguments
/// and non-terminator instructions.
KIND(StrongEntrance)
/// Introduces a ref count identity or consumes a ref count identity.
ABSTRACT_VALUE(EndPoint, StrongEntrance, StrongEntrance)
///-----------
/// Mutators |
///-----------
/// The increment of a strong reference count. This can only represent
/// non-terminator instructions.
KIND(StrongIncrement)
/// The decrement of a strong reference count. This can only represent
/// non-terminator instructions.
KIND(StrongDecrement)
ABSTRACT_VALUE(Mutator, StrongIncrement, StrongDecrement)
#undef ABSTRACT_VALUE
#undef KIND