@@ -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