ZHCU881D May 2020 – May 2024
在某些限定的情况下,编译器可生成两个循环:一个循环假定两个指针没有别名,另一个循环假定两个指针有别名。编译器生成运行时检查,以确定两个指针是否有别名。此优化称为运行时别名消歧。其优点在于,假定指针无别名的循环通常可以按更小的启动间隔进行软件流水线,从而提高循环性能。
由于技术性太强,无法在此进行描述,故编译器无法总是执行运行时别名消歧。此外,当编译器使用运行时别名检查生成两个不同的循环时,会抑制嵌套循环合并之类的某些进一步优化操作,因此最好在合法的前提下使用restrict (限制)关键字。
关于识别和消除循环携带依赖的进一步讨论和详细信息,请参阅以下参考资料: