blob: 44eb24450a758764e808094269d110cbbf881081 [file] [log] [blame]
//===--- UseOwnershipRequirement.h ----------------------------------------===//
//
// 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
//
//===----------------------------------------------------------------------===//
///
/// \file
///
/// This file contains declarations that enable clients to compute the ownership
/// requirements that a use puts on an SSA value. This is used in coordination
/// with the OwnershipChecker in SILOwnershipVerifier.cpp and the SILValue
/// ValueOwnershipKind visitor in ValueOwnershipKindClassifier.cpp to perform
/// SIL level ownership verification.
///
//===----------------------------------------------------------------------===//
#ifndef SWIFT_SIL_USEOWNERSHIPREQUIREMENT_H
#define SWIFT_SIL_USEOWNERSHIPREQUIREMENT_H
namespace swift {
/// What constraint does the given use of an SSA value put on the lifetime of
/// the given SSA value.
///
/// There are two possible constraints: MustBeLive and
/// MustBeInvalidated. MustBeLive means that the SSA value must be able to be
/// used in a valid way at the given use point. MustBeInvalidated means that any
/// use of given SSA value after this instruction on any path through this
/// instruction.
enum class UseLifetimeConstraint {
/// This use requires the SSA value to be live after the given instruction's
/// execution.
MustBeLive,
/// This use invalidates the given SSA value.
///
/// This means that the given SSA value can not have any uses that are
/// reachable from this instruction. When a value has owned semantics this
/// means the SSA value is destroyed at this point. When a value has
/// guaranteed (i.e. shared borrow) semantics this means that the program
/// has left the scope of the borrowed SSA value and said value can not be
/// used.
MustBeInvalidated,
};
} // end namespace swift
#endif