我正在使用C ++编写llvm代码。我的代码中有一个地方,下面的场景发生了
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 :(得分:0)
指令
%x = getelementptr %anytype* %y, i32 0
完全没有意义;就像你写的那样(非法):
%x = %y
是的,%123
和%127
都会指向相同的内存。这是安全的,但是多余的:您只需在%117
或%123
使用的地方直接使用%127
即可。您的代码段中唯一有问题的是值编号不是连续的,但我认为这只是粘贴代码的一部分。