2012-03-14 7 views
6

में किसी फ़ंक्शन का अंतिम मूल ब्लॉक क्या फ़ंक्शन की बैक() एलएलवीएम में सीएफजी के टर्मिनेटर मूल ब्लॉक को वापस करने की गारंटी देता है?एलएलवीएम

उत्तर

3

मुझे नहीं लगता, क्योंकि "टर्मिनेटर बीबी" जैसी कोई चीज़ नहीं है: रिटर्न द्वारा कई बीबी समाप्त हो सकते हैं।

+1

तुम मुझे एक से अधिक टर्मिनेटर BBs के साथ एक समारोह का एक उदाहरण दे सकते हैं? यहां तक ​​कि यदि कई रिटर्न हैं, तो सभी रिटर्न बीबी को "एकत्रित" करने के लिए एक एफआई के साथ एक बीबी होना चाहिए, है ना? – dalibocai

+0

नहीं, वास्तव में यूनिफाईफंक्शनएक्सिट नोड्स नामक एक पास भी है जो वास्तव में उसका नाम कहता है, यानी – CAFxX

+0

ठीक से एक से अधिक निकास से छुटकारा पा रहा है। समझा। धन्यवाद! – dalibocai

0

नहीं। फ़ंक्शन के एकाधिक टर्मिनेटर मूल ब्लॉक हो सकते हैं, उदाहरण के लिए एक फ़ंक्शन एकाधिक रिटर्न स्टेटमेंट्स। फ़ंक्शन से रिटर्न स्टेटमेंट वाले प्रत्येक मूल ब्लॉक को टर्मिनेटर ब्लॉक या टर्मिनेटर मूल ब्लॉक कहा जाएगा। सभी बुनियादी ब्लॉक कि टर्मिनेटर बुनियादी ब्लॉक (अर्थात एक वापसी कथन होते हैं) कर रहे हैं पता लगाने के लिए निम्न करें:

runOnFunction { 
    for BB in F: 
     for I in BB: 
      if (ReturnInst *RI = dyn_cast<ReturnInst> I) 
      BB is terminator Basic Block 
      endif 
     endfor 
    endfor 
}