1- // ===--- MoveKillsCopyableAddressesChecker .cpp ---- ------------------------===//
1+ // ===--- ConsumeOperatorCopyableAddressChecker .cpp ------------------------===//
22//
33// This source file is part of the Swift.org open source project
44//
133133// /
134134// ===----------------------------------------------------------------------===//
135135
136- #define DEBUG_TYPE " sil-move-kills -copyable-addresses-checker"
136+ #define DEBUG_TYPE " sil-consume-operator -copyable-addresses-checker"
137137
138138#include " swift/AST/DiagnosticsSIL.h"
139139#include " swift/AST/Types.h"
171171
172172using namespace swift ;
173173
174- static llvm::cl::opt<bool >
175- DisableUnhandledMoveDiagnostic ( " sil-disable-unknown-moveaddr-diagnostic" );
174+ static llvm::cl::opt<bool > DisableUnhandledConsumeOperator (
175+ " sil-consume-operator -disable-unknown-moveaddr-diagnostic" );
176176
177177// ===----------------------------------------------------------------------===//
178178// Utilities
@@ -245,9 +245,7 @@ struct ClosureOperandState {
245245 // / points.
246246 DebugValueInst *singleDebugValue = nullptr ;
247247
248- bool isUpwardsUse () const {
249- return result == DownwardScanResult::ClosureUse;
250- }
248+ bool isUpwardsUse () const { return result == DownwardScanResult::ClosureUse; }
251249
252250 bool isUpwardsConsume () const {
253251 return result == DownwardScanResult::ClosureConsume;
@@ -1552,9 +1550,9 @@ bool DataflowState::cleanupAllDestroyAddr(
15521550 // be defined before the value.
15531551 SILBuilderWithScope reinitBuilder ((*reinit)->getNextInstruction ());
15541552 reinitBuilder.setCurrentDebugScope (addressDebugInst->getDebugScope ());
1555- reinitBuilder.createDebugValue (
1556- addressDebugInst. inst -> getLoc (), address, *varInfo, false ,
1557- /* was moved*/ true );
1553+ reinitBuilder.createDebugValue (addressDebugInst. inst -> getLoc (), address,
1554+ *varInfo, false ,
1555+ /* was moved*/ true );
15581556 }
15591557 }
15601558 madeChange = true ;
@@ -1914,7 +1912,7 @@ void DataflowState::init() {
19141912
19151913namespace {
19161914
1917- struct MoveKillsCopyableAddressesChecker {
1915+ struct ConsumeOperatorCopyableAddressesChecker {
19181916 SILFunction *fn;
19191917 UseState useState;
19201918 DataflowState dataflowState;
@@ -1924,8 +1922,8 @@ struct MoveKillsCopyableAddressesChecker {
19241922 applySiteToPromotedArgIndices;
19251923 SmallBlotSetVector<SILInstruction *, 8 > closureConsumes;
19261924
1927- MoveKillsCopyableAddressesChecker (SILFunction *fn,
1928- SILOptFunctionBuilder &funcBuilder)
1925+ ConsumeOperatorCopyableAddressesChecker (SILFunction *fn,
1926+ SILOptFunctionBuilder &funcBuilder)
19291927 : fn(fn), useState(),
19301928 dataflowState (funcBuilder, useState, applySiteToPromotedArgIndices,
19311929 closureConsumes),
@@ -1951,7 +1949,7 @@ struct MoveKillsCopyableAddressesChecker {
19511949
19521950} // namespace
19531951
1954- void MoveKillsCopyableAddressesChecker ::cloneDeferCalleeAndRewriteUses (
1952+ void ConsumeOperatorCopyableAddressesChecker ::cloneDeferCalleeAndRewriteUses (
19551953 SmallVectorImpl<SILValue> &newArgs, const SmallBitVector &bitVector,
19561954 FullApplySite oldApplySite,
19571955 SmallBlotSetVector<SILInstruction *, 8 > &postDominatingConsumingUsers) {
@@ -2012,7 +2010,7 @@ void MoveKillsCopyableAddressesChecker::cloneDeferCalleeAndRewriteUses(
20122010 oldApplySite->eraseFromParent ();
20132011}
20142012
2015- bool MoveKillsCopyableAddressesChecker ::performClosureDataflow (
2013+ bool ConsumeOperatorCopyableAddressesChecker ::performClosureDataflow (
20162014 Operand *callerOperand, ClosureOperandState &calleeOperandState) {
20172015 auto fas = FullApplySite::isa (callerOperand->getUser ());
20182016 auto *func = fas.getCalleeFunction ();
@@ -2060,7 +2058,7 @@ bool MoveKillsCopyableAddressesChecker::performClosureDataflow(
20602058// Returns true if we emitted a diagnostic and handled the single block
20612059// case. Returns false if we visited all of the uses and seeded the UseState
20622060// struct with the information needed to perform our interprocedural dataflow.
2063- bool MoveKillsCopyableAddressesChecker ::performSingleBasicBlockAnalysis (
2061+ bool ConsumeOperatorCopyableAddressesChecker ::performSingleBasicBlockAnalysis (
20642062 SILValue address, DebugVarCarryingInst addressDebugInst,
20652063 MarkUnresolvedMoveAddrInst *mvi) {
20662064 // First scan downwards to make sure we are move out of this block.
@@ -2215,8 +2213,8 @@ bool MoveKillsCopyableAddressesChecker::performSingleBasicBlockAnalysis(
22152213 auto *next = interestingUser->getNextInstruction ();
22162214 SILBuilderWithScope reinitBuilder (next);
22172215 reinitBuilder.setCurrentDebugScope (addressDebugInst->getDebugScope ());
2218- reinitBuilder.createDebugValue (addressDebugInst->getLoc (),
2219- address, *varInfo, false ,
2216+ reinitBuilder.createDebugValue (addressDebugInst->getLoc (), address,
2217+ *varInfo, false ,
22202218 /* was moved*/ true );
22212219 }
22222220 }
@@ -2287,7 +2285,7 @@ bool MoveKillsCopyableAddressesChecker::performSingleBasicBlockAnalysis(
22872285 return false ;
22882286}
22892287
2290- bool MoveKillsCopyableAddressesChecker ::check (SILValue address) {
2288+ bool ConsumeOperatorCopyableAddressesChecker ::check (SILValue address) {
22912289 auto accessPathWithBase = AccessPathWithBase::compute (address);
22922290 auto accessPath = accessPathWithBase.accessPath ;
22932291
@@ -2384,8 +2382,8 @@ bool MoveKillsCopyableAddressesChecker::check(SILValue address) {
23842382 // Ok, we need to perform global dataflow for one of our moves. Initialize our
23852383 // dataflow state engine and then run the dataflow itself.
23862384 dataflowState.init ();
2387- bool result = dataflowState. process (
2388- address, addressDebugInst, closureConsumes);
2385+ bool result =
2386+ dataflowState. process ( address, addressDebugInst, closureConsumes);
23892387 return result;
23902388}
23912389
@@ -2395,7 +2393,8 @@ bool MoveKillsCopyableAddressesChecker::check(SILValue address) {
23952393
23962394namespace {
23972395
2398- class MoveKillsCopyableAddressesCheckerPass : public SILFunctionTransform {
2396+ class ConsumeOperatorCopyableAddressesCheckerPass
2397+ : public SILFunctionTransform {
23992398 void run () override {
24002399 auto *fn = getFunction ();
24012400 auto &astContext = fn->getASTContext ();
@@ -2442,7 +2441,7 @@ class MoveKillsCopyableAddressesCheckerPass : public SILFunctionTransform {
24422441
24432442 SILOptFunctionBuilder funcBuilder (*this );
24442443
2445- MoveKillsCopyableAddressesChecker checker (getFunction (), funcBuilder);
2444+ ConsumeOperatorCopyableAddressesChecker checker (getFunction (), funcBuilder);
24462445
24472446 bool madeChange = false ;
24482447 while (!addressToProcess.empty ()) {
@@ -2481,7 +2480,7 @@ class MoveKillsCopyableAddressesCheckerPass : public SILFunctionTransform {
24812480 // uses have been resolved appropriately.
24822481 //
24832482 // TODO: Emit specific diagnostics here (e.x.: _move of global).
2484- if (DisableUnhandledMoveDiagnostic )
2483+ if (DisableUnhandledConsumeOperator )
24852484 return ;
24862485
24872486 bool lateMadeChange = false ;
@@ -2513,6 +2512,6 @@ class MoveKillsCopyableAddressesCheckerPass : public SILFunctionTransform {
25132512
25142513} // anonymous namespace
25152514
2516- SILTransform *swift::createMoveKillsCopyableAddressesChecker () {
2517- return new MoveKillsCopyableAddressesCheckerPass ();
2515+ SILTransform *swift::createConsumeOperatorCopyableAddressesChecker () {
2516+ return new ConsumeOperatorCopyableAddressesCheckerPass ();
25182517}
0 commit comments