1
나는 -S -emit-llvm
이 코드를 컴파일 할 연타를 사용 :clang 컴파일러가 인수를 취하는 모든 함수의 시작 부분에이 지침을 넣는 이유는 무엇입니까?
int sub2(int n) {
return n - 2
}
을 그리고 이것은 출력 코드 :
define i32 @sub2(i32) #0 {
%2 = sub i32 %0, 2
ret i32 %2
}
: 나는 같은 기능을 쓸 수있다, 그러나
; Function Attrs: nounwind
define i32 @_Z4sub2i(i32) #0 {
%2 = alloca i32, align 4
store i32 %0, i32* %2, align 4
%3 = load i32, i32* %2, align 4
%4 = sub nsw i32 %3, 2
ret i32 %4
}
왜 그런 지시를 추가합니까? 나는 그것에 대해 확신하지 못한다. 그러나 그것은 논쟁을 복사하고있는 것처럼 보인다.
최적화가 활성화되어 있습니까? –
@ChrisBeck'-S -emit-llvm'을 사용했습니다 – user6245072
인수를 로컬 변수에 복사 중입니다. '-S -emit-llvm'을 사용하면 최적화되지 않은 코드가 생성되므로'-S -emit-llvm -O3' 또는'-O2'를 사용하여 다른 것을 볼 수 있습니다. 자동으로 최적화되지 않는 이유는 무엇입니까? 컴파일러에게 마법을 부탁하지 않았으므로 표현을 생성합니다. 아마도 AST 사전 생성 (SSA 기반)에있을 것입니다. –