ZHCUAV8W january 1998 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
可以使用--call_assumptions 選項控制由--program_level_compile --opt_level=3 調用的程序級優(yōu)化。具體而言,--call_assumptions 選項表示其他模塊中的函數(shù)是否可以調用模塊的外部函數(shù)或修改模塊的外部變量。--call_assumptions 后面的數(shù)字表示您為允許調用或修改的模塊而設置的級別。--opt_level=3 選項將此信息與其自身的文件級分析相結合,以決定是否將該模塊的外部函數(shù)和變量聲明視為靜態(tài)聲明。使用表 3-3 選擇合適的級別以附加到 --call_assumptions 選項。
| 如果模塊... | 使用此選項 |
|---|---|
| 具有從其他模塊調用的函數(shù)以及在其他模塊中修改的全局變量 | --call_assumptions=0 |
| 不具有由其他模塊調用的函數(shù),但具有在其他模塊中修改的全局變量 | --call_assumptions=1 |
| 不具有由其他模塊調用的函數(shù),也不具有在其他模塊中修改的全局變量 | --call_assumptions=2 |
| 具有從其他模塊調用的函數(shù),但不具有在其他模塊中修改的全局變量 | --call_assumptions=3 |
在某些情況下,編譯器恢復到與指定級別不同的 --call_assumptions 級別,或者可能完全禁用程序級優(yōu)化。表 3-4 列出了 --call_assumptions 級別與導致編譯器恢復到其他 --call_assumptions 級別的條件的組合。
| 如果 --call_assumptions 為... | 在以下條件下... | 則 --call_assumptions 級別... |
|---|---|---|
| 未指定 | 指定了 --opt_level=3 優(yōu)化級別 | 默認為 --call_assumptions=2 |
| 未指定 | 編譯器在 --opt_level=3 優(yōu)化級別下發(fā)現(xiàn)對外部函數(shù)的調用 | 恢復為 --call_assumptions=0 |
| 未指定 | 未定義 main | 恢復為 --call_assumptions=0 |
| --call_assumptions=1 或 --call_assumptions=2 | 沒有將 main 定義為入口點的函數(shù),也沒有定義中斷函數(shù),也 沒有由 FUNC_EXT_CALLED pragma 標識的函數(shù) | 恢復為 --call_assumptions=0 |
| --call_assumptions=1 或 --call_assumptions=2 | 定義了 main 函數(shù),或 定義了中斷函數(shù),或 者用 FUNC_EXT_CALLED pragma 標識了函數(shù) | 保留 --call_assumptions=1 或 --call_assumptions=2 |
| --call_assumptions=3 | 任何條件下 | 保留 --call_assumptions=3 |
在某些情況下,使用 --program_level_compile 和 --opt_level=3 時,則必須 使用 --call_assumptions 選項或 FUNC_EXT_CALLED pragma。有關這些情況的信息,請參閱節(jié) 3.4.2。