2013-10-29 3 views
0

C++을 사용하여 llvm 코드를 작성하고 있습니다. 아래의 시나리오는 내가 다른 주소 매개 변수 값에 선 7, 8에 두 번 같은 데이터 형식을 가리켜 야 같은 주소를 계산하기 위해 노력하고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> 

일어나는 곳 난 내 코드에서 장소를 가지고있다. 이 작업을 수행하는 것이 안전할까요, 아니면 정의되지 않은 결과를 초래할 수 있습니까?

답변

0

명령

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

완전히 무의미하다; 당신이 (불법) 작성한 것처럼는 다음과 같습니다

%x = %y 

는 그래서 그래, 모두 %123%127는 동일한 메모리를 가리 킵니다. 안전하지만 중복 됨 : %123 또는 %127을 사용하는 경우 %117을 직접 사용할 수 있습니다. 스 니펫의 유일한 문제는 값의 번호 매김이 순차적이지 않다는 것입니다. 그러나 여기서는 코드의 일부만 붙여 넣는 것으로 가정합니다.