首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在LLVM IR中限制C中的限定符与no别名属性

问在LLVM IR中限制C中的限定符与no别名属性
EN

Stack Overflow用户
提问于 2016-10-24 16:38:18
回答 1查看 1.5K关注 0票数 8

我的问题涉及C中的限制限定符和LLVM中的别名属性作为函数参数时的不同语义。

根据小名

这表明,在函数执行期间,通过基于参数或返回值的指针值访问的对象也不会通过不基于参数或返回值的指针值进行访问。

在限制限定符的情况下,C11 (例3,page124,sect. )6.7.3.1)草案提供了一个示例,其中两个限制参数之间存在别名,只要它们只读取数据就可以了:

代码语言:javascript
复制
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];
}

在我看来,上面给出的示例似乎不符合no别名的语义。是这种情况吗?

EN

回答 1

Stack Overflow用户

发布于 2016-10-25 05:05:01

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

最明显的例子是当两个指针指向不重叠的内存范围时。另一种情况是,这两个指针只用于读取内存。另一种情况是,当内存被释放并在通过一个指针进行访问和通过另一个指针进行访问之间重新分配时--在这种情况下,存在依赖关系,但它是通过自由和重新分配来实现的。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40223359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档