2013-10-29 48 views
0

我正在使用C++编写llvm代码。我有一个地方在我的代码在以下情况下会发生将GetElementPtr按预期工作

1. %117 = phi <2 x double>* [ %105, %aligned ], [ %159, %116 ] 
7. %123 = getelementptr <2 x double>* %117, i32 0 
8. %127 = getelementptr <2 x double>* %123, i32 0 
9. %128 = load <2 x double>* %127 
10. %129 = getelementptr <2 x double>* %123, i32 1 
11. %130 = load <2 x double>* %129 
12. %131 = shufflevector <2 x double> %128, <2 x double> %130, <2 x i32> <i32 1, i32 3> 

我试图计算应在线路7和8不同的地址参数值指向相同的数据类型两次相同的地址。这样做是安全的还是会导致未定义的结果?

回答

0

指令

%x = getelementptr %anytype* %y, i32 0 

是完全没有意义的;就好像你写的(非法):

%x = %y 

所以,是的,无论是%123%127将指向相同的内存。这是安全的,但多余:只要使用%123%127,您就可以直接使用%117。你的代码片段中唯一有问题的是值的编号不是顺序的,但我认为这只是粘贴部分代码而已。