我的问题与C中的限制限定符和LLVM中的 noalias 属性用作函数参数时的语义不同有关。

根据LLVM documentation for noalias:



如果使用限制限定词,则C11 (Example 3, page124, sect. 6.7.3.1)的草稿将举一个示例,其中两个限制参数之间存在别名,只要它们仅读取数据,就可以了:

void h(int n, int * restrict p, int * restrict q, int * restrict r) {
    int i;
    for (i = 0; i < n; i++)
        p[i] = q[i] + r[i];
}

在我看来,以上给出的示例似乎不满足 noalias 的语义。是这样吗

最佳答案

正如Jens Gustedt所建议的那样,深入研究链接使我进入AliasAnalysis页面,该页面指出:



这解决了一个问题:noalias属性等效于函数参数中的C restrict限定符。

10-05 22:59
查看更多