LLVM每日谈之十八 GEP Instruction的几点总结

简介: In summary, here’s some things to always remember about the GetElementPtr instruction: The GEP instruction never accesses memory, it only provides pointer computations.

In summary, here’s some things to always remember about the GetElementPtr instruction:

  1. The GEP instruction never accesses memory, it only provides pointer computations.
  2. The first operand to the GEP instruction is always a pointer and it must be indexed.
  3. There are no superfluous indices for the GEP instruction.
  4. Trailing zero indices are superfluous for pointer aliasing, but not for the types of the pointers.
  5. Leading zero indices are not superfluous for pointer aliasing nor the types of the pointers.

这几条是《The Often Misunderstood GEP Instruction》文档最后对GEP指令的总结,原文档地址为:

http://llvm.org/docs/GetElementPtr.html
这几天基本上涵盖了GEP使用中需要注意的问题,现翻译如下:
1. GEP指令绝不允许操作内存,它只能提供指针相关的计算。
2. GEP指令的第一个操作数通常是一个指针,而且它通常是可以索引的。
3. GEP指令没有多余的无用的下标索引。
4. 下标索引尾部的0对指针的混用是没区别的,但是对指针类型的混用确是有区别的。
(译者注:此处指的是下标索引尾部有0和没0的混用。)
5. 下标索引头部的0对指针的混用和指针类型的混用都是有区别的。

(译者注:此处指的是下标索引头部有0和没0的混用。)

目录
相关文章
|
编译器 C++ 前端开发
带你读《LLVM编译器实战教程》之三:工具和设计
本书的前半部分将向您介绍怎么样去配置、构建、和安装LLVM的不同软件库、工具和外部项目。接下来,本书的后半部分将向您介绍LLVM的各种设计细节,并逐步地讲解LLVM的各个编译步骤:前段、中间表示(IR)、后端、即时编译(JIT)引擎、跨平台编译和插件接口。本书包含有大量翔实的示例和代码片段,以帮助读者平稳顺利的掌握LLVM的编译器开发环境。
|
编译器 iOS开发 Windows
带你读《LLVM编译器实战教程》之一:构建和安装LLVM
本书的前半部分将向您介绍怎么样去配置、构建、和安装LLVM的不同软件库、工具和外部项目。接下来,本书的后半部分将向您介绍LLVM的各种设计细节,并逐步地讲解LLVM的各个编译步骤:前段、中间表示(IR)、后端、即时编译(JIT)引擎、跨平台编译和插件接口。本书包含有大量翔实的示例和代码片段,以帮助读者平稳顺利的掌握LLVM的编译器开发环境。
20197 0
|
前端开发 编译器 C++
深入研究Clang(一)Clang和LLVM的关系及整体架构
作者:史宁宁(snsn1984) Clang和LLVM的关系        Clang和LLVM到底是什么关系,这是在研究Clang的过程中所不可避免的一个问题。
1757 0
|
前端开发 安全 Java
LLVM官方文档翻译---- LLVM原子指令与并发指引
英文原文地址:http://llvm.org/docs/Atomics.html 译文原文地址:http://blog.csdn.net/wuhui_gdnt/article/details/52485591 注:该文章转载已经得到译者授权。
1905 0
|
Unix
深入研究Clang(九) Clang代码阅读之打log读流程2
继续上一篇,同样的hello.c,同样的执行过程,只不过继续添加了一些log信息,而且对代码进行了更近一步的挖掘。先看输入和输出的log信息(前半部分): shining@shining-VirtualBox:~/llvm-3.
1452 0
深入研究Clang(八) Clang代码阅读之打log读流程1
这个过程简单的分为几步。 第一步:写一个简单的小程序,hello.c。内容如下: #includeint main() {  printf("Hello world!\n");} 第二步:找出如何在LLVM里面输出信息,最后选择采用llvm::errs(),等于采用了LLVM的错误机制。
1240 0
|
Web App开发 JavaScript
深入研究Clang(七) Clang Lexer代码阅读笔记之Lexer
作者:史宁宁(snsn1984) 源码位置:clang/lib/Lexer.cpp 源码网络地址:http://clang.llvm.org/doxygen/Lexer_8cpp_source.html Lexer.cpp这个文件,是Clang这个前端的词法分析器的主要文件,它的内容是对Lexer这个类的具体实现,原文件的注释中:“This file implements the Lexer and Token interfaces.” 这么解释这个文件的,但是Token只有两个简单函数的实现,剩下的都是Lexer的实现。
1624 0
|
前端开发 C语言 C++
LLVM和Clang背后的故事
LLVM是Apple官方支持的编译器,而该编译器的前端是Clang,这两个工具都被集成到了Xcode里面。
1878 0