mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
The ownership kind is Any for trivial types, or Owned otherwise, but whether a type is trivial or not will soon depend on the resilience expansion. This means that a SILModule now uniques two SILUndefs per type instead of one, and serialization uses two distinct sentinel IDs for this purpose as well. For now, the resilience expansion is not actually used here, so this change is NFC, other than changing the module format.
57 lines
1.7 KiB
C++
57 lines
1.7 KiB
C++
//===--- SILUndef.h - SIL Undef Value Representation ------------*- 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef SWIFT_SIL_UNDEF_H
|
|
#define SWIFT_SIL_UNDEF_H
|
|
|
|
#include "swift/Basic/Compiler.h"
|
|
#include "swift/SIL/SILValue.h"
|
|
|
|
namespace swift {
|
|
|
|
class SILArgument;
|
|
class SILInstruction;
|
|
class SILModule;
|
|
|
|
class SILUndef : public ValueBase {
|
|
ValueOwnershipKind ownershipKind;
|
|
|
|
SILUndef(SILType type, ValueOwnershipKind ownershipKind);
|
|
|
|
public:
|
|
void operator=(const SILArgument &) = delete;
|
|
void operator delete(void *, size_t) SWIFT_DELETE_OPERATOR_DELETED;
|
|
|
|
static SILUndef *get(SILType ty, SILModule &m, ValueOwnershipKind ownershipKind);
|
|
static SILUndef *get(SILType ty, const SILFunction &f);
|
|
|
|
template <class OwnerTy>
|
|
static SILUndef *getSentinelValue(SILType type, OwnerTy owner) {
|
|
// Ownership kind isn't used here, the value just needs to have a unique
|
|
// address.
|
|
return new (*owner) SILUndef(type, ValueOwnershipKind::Any);
|
|
}
|
|
|
|
ValueOwnershipKind getOwnershipKind() const { return ownershipKind; }
|
|
|
|
static bool classof(const SILArgument *) = delete;
|
|
static bool classof(const SILInstruction *) = delete;
|
|
static bool classof(const SILNode *node) {
|
|
return node->getKind() == SILNodeKind::SILUndef;
|
|
}
|
|
};
|
|
|
|
} // end swift namespace
|
|
|
|
#endif
|
|
|