@@ -44,28 +44,10 @@ using namespace llvm;
4444using namespace llvm ::at;
4545using namespace llvm ::dwarf;
4646
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) {
6951 // This function is hot. Check whether the value has any metadata to avoid a
7052 // DenseMap lookup.
7153 if (!V->isUsedByMetadata ())
@@ -94,7 +76,7 @@ static void findDbgIntrinsics(SmallVectorImpl<IntrinsicT *> &Result,
9476 // Get DPValues that use this as a single value.
9577 if (LocalAsMetadata *L = dyn_cast<LocalAsMetadata>(MD)) {
9678 for (DPValue *DPV : L->getAllDPValueUsers ()) {
97- if (DPV-> getType () == DPValue::LocationType::Value )
79+ if (Type == DPValue::LocationType::Any || DPV-> getType () == Type )
9880 DPValues->push_back (DPV);
9981 }
10082 }
@@ -108,21 +90,29 @@ static void findDbgIntrinsics(SmallVectorImpl<IntrinsicT *> &Result,
10890 continue ;
10991 DIArgList *DI = cast<DIArgList>(AL);
11092 for (DPValue *DPV : DI->getAllDPValueUsers ())
111- if (DPV-> getType () == DPValue::LocationType::Value )
93+ if (Type == DPValue::LocationType::Any || DPV-> getType () == Type )
11294 if (EncounteredDPValues.insert (DPV).second )
11395 DPValues->push_back (DPV);
11496 }
11597 }
11698}
11799
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+
118106void llvm::findDbgValues (SmallVectorImpl<DbgValueInst *> &DbgValues,
119107 Value *V, SmallVectorImpl<DPValue *> *DPValues) {
120- findDbgIntrinsics<DbgValueInst>(DbgValues, V, DPValues);
108+ findDbgIntrinsics<DbgValueInst, DPValue::LocationType::Value>(DbgValues, V,
109+ DPValues);
121110}
122111
123112void llvm::findDbgUsers (SmallVectorImpl<DbgVariableIntrinsic *> &DbgUsers,
124113 Value *V, SmallVectorImpl<DPValue *> *DPValues) {
125- findDbgIntrinsics<DbgVariableIntrinsic>(DbgUsers, V, DPValues);
114+ findDbgIntrinsics<DbgVariableIntrinsic, DPValue::LocationType::Any>(
115+ DbgUsers, V, DPValues);
126116}
127117
128118DISubprogram *llvm::getDISubprogram (const MDNode *Scope) {
0 commit comments