@@ -44,28 +44,10 @@ using namespace llvm;
44
44
using namespace llvm ::at;
45
45
using namespace llvm ::dwarf;
46
46
47
- void llvm::findDbgDeclares (SmallVectorImpl<DbgDeclareInst *> &DbgUsers,
48
- Value *V) {
49
- // This function is hot. Check whether the value has any metadata to avoid a
50
- // DenseMap lookup.
51
- if (!V->isUsedByMetadata ())
52
- return ;
53
- auto *L = LocalAsMetadata::getIfExists (V);
54
- if (!L)
55
- return ;
56
- auto *MDV = MetadataAsValue::getIfExists (V->getContext (), L);
57
- if (!MDV)
58
- return ;
59
-
60
- for (User *U : MDV->users ()) {
61
- if (auto *DDI = dyn_cast<DbgDeclareInst>(U))
62
- DbgUsers.push_back (DDI);
63
- }
64
- }
65
-
66
- template <typename IntrinsicT>
67
- static void findDbgIntrinsics (SmallVectorImpl<IntrinsicT *> &Result,
68
- Value *V, SmallVectorImpl<DPValue *> *DPValues) {
47
+ template <typename IntrinsicT,
48
+ DPValue::LocationType Type = DPValue::LocationType::Any>
49
+ static void findDbgIntrinsics (SmallVectorImpl<IntrinsicT *> &Result, Value *V,
50
+ SmallVectorImpl<DPValue *> *DPValues) {
69
51
// This function is hot. Check whether the value has any metadata to avoid a
70
52
// DenseMap lookup.
71
53
if (!V->isUsedByMetadata ())
@@ -94,7 +76,7 @@ static void findDbgIntrinsics(SmallVectorImpl<IntrinsicT *> &Result,
94
76
// Get DPValues that use this as a single value.
95
77
if (LocalAsMetadata *L = dyn_cast<LocalAsMetadata>(MD)) {
96
78
for (DPValue *DPV : L->getAllDPValueUsers ()) {
97
- if (DPV-> getType () == DPValue::LocationType::Value )
79
+ if (Type == DPValue::LocationType::Any || DPV-> getType () == Type )
98
80
DPValues->push_back (DPV);
99
81
}
100
82
}
@@ -108,21 +90,29 @@ static void findDbgIntrinsics(SmallVectorImpl<IntrinsicT *> &Result,
108
90
continue ;
109
91
DIArgList *DI = cast<DIArgList>(AL);
110
92
for (DPValue *DPV : DI->getAllDPValueUsers ())
111
- if (DPV-> getType () == DPValue::LocationType::Value )
93
+ if (Type == DPValue::LocationType::Any || DPV-> getType () == Type )
112
94
if (EncounteredDPValues.insert (DPV).second )
113
95
DPValues->push_back (DPV);
114
96
}
115
97
}
116
98
}
117
99
100
+ void llvm::findDbgDeclares (SmallVectorImpl<DbgDeclareInst *> &DbgUsers,
101
+ Value *V, SmallVectorImpl<DPValue *> *DPValues) {
102
+ findDbgIntrinsics<DbgDeclareInst, DPValue::LocationType::Declare>(DbgUsers, V,
103
+ DPValues);
104
+ }
105
+
118
106
void llvm::findDbgValues (SmallVectorImpl<DbgValueInst *> &DbgValues,
119
107
Value *V, SmallVectorImpl<DPValue *> *DPValues) {
120
- findDbgIntrinsics<DbgValueInst>(DbgValues, V, DPValues);
108
+ findDbgIntrinsics<DbgValueInst, DPValue::LocationType::Value>(DbgValues, V,
109
+ DPValues);
121
110
}
122
111
123
112
void llvm::findDbgUsers (SmallVectorImpl<DbgVariableIntrinsic *> &DbgUsers,
124
113
Value *V, SmallVectorImpl<DPValue *> *DPValues) {
125
- findDbgIntrinsics<DbgVariableIntrinsic>(DbgUsers, V, DPValues);
114
+ findDbgIntrinsics<DbgVariableIntrinsic, DPValue::LocationType::Any>(
115
+ DbgUsers, V, DPValues);
126
116
}
127
117
128
118
DISubprogram *llvm::getDISubprogram (const MDNode *Scope) {
0 commit comments