GetElementPtr是否会按预期工作 我用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> 1.%117=φ*[%105%,对齐],%159,%116] 7%123=getelementptr*%117,i32 0 8%127=getelementptr*%123,i32 0 9%128=负载*%127 10%129=getelementptr*%123,i32 1 11%130=负载*%129 12%131=shufflevector%128,%130,
我试图在第7行和第8行计算相同的地址,该地址应该指向相同的数据类型两次,并且地址参数值不同。这样做安全吗?还是会导致未定义的结果?说明GetElementPtr是否会按预期工作 我用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> 1.%117=φ*[%105%,对齐],%159,%116] 7%123=getelementptr*%117,i32 0 8%127=getelementptr*%123,i32 0 9%128=负载*%127 10%129=getelementptr*%123,i32 1 11%130=负载*%129 12%131=shufflevector%128,%130,,llvm,llvm-ir,Llvm,Llvm Ir,我试图在第7行和第8行计算相同的地址,该地址应该指向相同的数据类型两次,并且地址参数值不同。这样做安全吗?还是会导致未定义的结果?说明 %x = getelementptr %anytype* %y, i32 0 完全没有意义,;就好像你写了(非法的): 因此,是的,%123和%127都指向相同的内存。它是安全的,但冗余的:只要在使用%123或%127的地方直接使用%117。代码段中唯一有问题的地方是值编号不是顺序的,但我假设这只是因为在这里粘贴了部分代码 %x = %y
%x = getelementptr %anytype* %y, i32 0
完全没有意义,;就好像你写了(非法的):
因此,是的,%123
和%127
都指向相同的内存。它是安全的,但冗余的:只要在使用%123
或%127
的地方直接使用%117
。代码段中唯一有问题的地方是值编号不是顺序的,但我假设这只是因为在这里粘贴了部分代码
%x = %y