Instruction
Value
से लिया गया है, यह दोनों कार्यों को users
और uses
प्राप्त करता है। अंतर यह है कि Value
के उपयोगकर्ता के पास Value
है जो इसके संचालन में से एक है।
जब आप uses
बुला रहे हैं आप सभी Use
उदाहरणों विशेष Value
के उपयोगकर्ताओं में से प्रत्येक के Value
से एक संदर्भ पकड़े की एक सूची प्राप्त। कॉलिंग users
आपको सीधे User
की एक सूची देता है। निम्नलिखित कोड दिखाता है कि users
और uses
का उपयोग कैसे करें।
for(auto U : V->users()){ // U is of type User*
if (auto I = dyn_cast<Instruction>(U)){
// an instruction uses V
}
}
आप एक शॉर्टकट के रूप users
देख सकते हैं क्योंकि आप का उपयोग करता है के साथ भी ऐसा कर सकते हैं:
for(auto U : V->uses()){ // U is of type Use*
if (auto I = dyn_cast<Instruction>(U.getUser())){
// an instruction uses V
}
}
आमतौर पर यह users
उपयोग करने के लिए एक Value
के सभी निर्भरता प्राप्त करने के लिए पर्याप्त है।
Value
द्वारा उपयोग किए जाने वाले सभी मूल्य ऑपरेंड हैं। निर्भरता की यह दिशा Value
की उपयोग सूची का हिस्सा नहीं है।
मूल्य उत्पन्न करने वाले निर्देशों के बारे में दूसरे प्रश्न के लिए: इस बात की कोई गारंटी नहीं है कि उपयोग की अनुपस्थिति के परिणामस्वरूप मूल्य का उत्पादन नहीं होता है। एक मृत निर्देश एक मूल्य उत्पन्न कर सकता है और इसमें कोई उपयोगकर्ता नहीं है। इसके अतिरिक्त, एक संस्था का उत्पादन नहीं करने वाला संस्थान मेटाडेटा द्वारा उपयोग किया जा सकता है।
स्रोत
2016-02-13 18:55:15
ध्यान दें कि, प्रत्येक उपयोगकर्ता एक निर्देश नहीं है, यानी, उपयोगकर्ता भी एक अभिव्यक्ति हो सकता है। – benben