2012-03-20 2 views
1

왜 내가 mem2reg 통과 다른 최적화 결과를 얻기 위해 바이트 코드 최적화에서 통과해야합니까? mem2reg의 용도는 무엇입니까? 이 경우최적화 통과가 mem2reg없이 작동하지 않는 이유는 무엇입니까?

opt -dce myfile.bc 

나는 출력 코드의 변경 사항이이 두 번째 경우의 출력 코드

opt -mem2reg -dce myfile.bc 

에서하지 않은 변경이

편집 : LLVR IR은 SSA에 여전히 폼, 안 그래? mem2reg를 사용하면 "정리 된"SSA 양식이 있어야합니다. 맞습니까?

+0

음, 같은 코드 모양을 무엇입니까? ('llvm-dis' 또는 그것이 호출하는 것을 실행 해보십시오.) 하나의 최적화가 다른 것을 가능하게하는 것은 꽤 빈번합니다. – delnan

+0

그래,이게 알아,하지만 내 질문은 mem2reg 무엇입니까? 어떤 종류의 최적화를합니까? – Nicola

답변

6

mem2reg pass는 비 SSA 형식의 LLVM IR을 SSA 형식으로 변환하여 스택 할당 값을 "레지스터"(SSA 값)로 올립니다. 대부분의 LLVM 최적화 단계는 SSA 형식의 코드에서 작동하므로 비 SSA 형식의 IR은 볼 수 없습니다.

좀 더 정보가 여기에 있습니다 : http://llvm.org/docs/Passes.html#mem2reg-promote-memory-to-register

+0

실례 합니다만, LLVR IR은 여전히 ​​SSa 형태입니다. 그렇지 않습니까? 이런 식으로 나는 SSA 형식의 "가지 치기 (pruned)"해야합니다. 맞습니까? – Nicola

+0

@Nicola - LLVM IR은 SSA 형식 일 수 있으며 현재는 (LLVM 세계에서 SSA가 아니기 때문에) IR이 될 수도 있습니다. 따라서 alloca의로드 및 저장과 함께 비 SSA LLVM IR을 쉽게 가질 수 있습니다. –

+0

감사합니다. .......... – Nicola

관련 문제