Files
swift-mirror/lib/SILOptimizer/Utils/PartitionUtils.cpp
Michael Gottesman c336f3a47e [region-isolation] Track transferring separately from region information.
What this does is really split the one dataflow we are performing into two
dataflows we perform at the same time. The first dataflow is the region dataflow
that we already have with transferring never occurring. The second dataflow is a
simple gen/kill dataflow where we gen on a transfer instruction and kill on
AssignFresh. What it tracks are regions where a specific element is transferred
and propagates the region until the element is given a new value. This of course
means that once the dataflow has converged, we have to emit an error not if the
value was transferred, but if any value in its region was transferred.
2023-11-10 12:48:45 -08:00

34 lines
1.3 KiB
C++

//===--- PartitionUtils.cpp -----------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2023 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
//
//===----------------------------------------------------------------------===//
#include "swift/SILOptimizer/Utils/PartitionUtils.h"
#include "llvm/Support/CommandLine.h"
//===----------------------------------------------------------------------===//
// MARK: Logging
//===----------------------------------------------------------------------===//
#ifndef NDEBUG
bool swift::PartitionPrimitives::REGIONBASEDISOLATION_ENABLE_VERBOSE_LOGGING;
static llvm::cl::opt<bool, true> // The parser
RegionBasedIsolationVerboseLog(
"sil-regionbasedisolation-verbose-log",
llvm::cl::desc("Enable verbose logging for SIL region based isolation "
"diagnostics"),
llvm::cl::Hidden,
llvm::cl::location(swift::PartitionPrimitives::
REGIONBASEDISOLATION_ENABLE_VERBOSE_LOGGING));
#endif