@@ -3287,16 +3287,6 @@ class StoreInst
3287
3287
3288
3288
class EndBorrowInst ;
3289
3289
3290
- struct UseToEndBorrow {
3291
- Optional<EndBorrowInst *> operator ()(Operand *use) const {
3292
- if (auto endBorrow = dyn_cast<EndBorrowInst>(use->getUser ())) {
3293
- return endBorrow;
3294
- } else {
3295
- return None;
3296
- }
3297
- }
3298
- };
3299
-
3300
3290
// / Represents a load of a borrowed value. Must be paired with an end_borrow
3301
3291
// / instruction in its use-def list.
3302
3292
class LoadBorrowInst :
@@ -3310,14 +3300,14 @@ class LoadBorrowInst :
3310
3300
LValue->getType ().getObjectType()) {}
3311
3301
3312
3302
using EndBorrowRange =
3313
- OptionalTransformRange<use_range, UseToEndBorrow, use_iterator> ;
3303
+ decltype (std::declval<ValueBase>().getUsersOfType<EndBorrowInst>()) ;
3314
3304
3315
3305
// / Return a range over all EndBorrow instructions for this BeginBorrow.
3316
3306
EndBorrowRange getEndBorrows () const ;
3317
3307
};
3318
3308
3319
3309
inline auto LoadBorrowInst::getEndBorrows () const -> EndBorrowRange {
3320
- return EndBorrowRange ( getUses (), UseToEndBorrow () );
3310
+ return getUsersOfType<EndBorrowInst>( );
3321
3311
}
3322
3312
3323
3313
// / Represents the begin scope of a borrowed value. Must be paired with an
@@ -3333,7 +3323,7 @@ class BeginBorrowInst
3333
3323
3334
3324
public:
3335
3325
using EndBorrowRange =
3336
- OptionalTransformRange<use_range, UseToEndBorrow, use_iterator> ;
3326
+ decltype (std::declval<ValueBase>().getUsersOfType<EndBorrowInst>()) ;
3337
3327
3338
3328
// / Return a range over all EndBorrow instructions for this BeginBorrow.
3339
3329
EndBorrowRange getEndBorrows () const ;
@@ -3348,7 +3338,7 @@ class BeginBorrowInst
3348
3338
};
3349
3339
3350
3340
inline auto BeginBorrowInst::getEndBorrows () const -> EndBorrowRange {
3351
- return EndBorrowRange ( getUses (), UseToEndBorrow () );
3341
+ return getUsersOfType<EndBorrowInst>( );
3352
3342
}
3353
3343
3354
3344
// / Represents a store of a borrowed value into an address. Returns the borrowed
@@ -3487,6 +3477,8 @@ enum class SILAccessEnforcement : uint8_t {
3487
3477
};
3488
3478
StringRef getSILAccessEnforcementName (SILAccessEnforcement enforcement);
3489
3479
3480
+ class EndAccessInst ;
3481
+
3490
3482
// / Begins an access scope. Must be paired with an end_access instruction
3491
3483
// / along every path.
3492
3484
class BeginAccessInst
@@ -3558,13 +3550,8 @@ class BeginAccessInst
3558
3550
return getOperand ();
3559
3551
}
3560
3552
3561
- private:
3562
- // / Predicate used to filter EndAccessRange.
3563
- struct UseToEndAccess ;
3564
-
3565
- public:
3566
3553
using EndAccessRange =
3567
- OptionalTransformRange<use_range, UseToEndAccess, use_iterator> ;
3554
+ decltype (std::declval<ValueBase>().getUsersOfType<EndAccessInst>()) ;
3568
3555
3569
3556
// / Find all the associated end_access instructions for this begin_access.
3570
3557
EndAccessRange getEndAccesses () const ;
@@ -3605,18 +3592,8 @@ class EndAccessInst
3605
3592
}
3606
3593
};
3607
3594
3608
- struct BeginAccessInst ::UseToEndAccess {
3609
- Optional<EndAccessInst *> operator ()(Operand *use) const {
3610
- if (auto access = dyn_cast<EndAccessInst>(use->getUser ())) {
3611
- return access;
3612
- } else {
3613
- return None;
3614
- }
3615
- }
3616
- };
3617
-
3618
3595
inline auto BeginAccessInst::getEndAccesses () const -> EndAccessRange {
3619
- return EndAccessRange ( getUses (), UseToEndAccess () );
3596
+ return getUsersOfType<EndAccessInst>( );
3620
3597
}
3621
3598
3622
3599
// / Begins an access without requiring a paired end_access.
0 commit comments