Open summerBreeze2007 opened 6 months ago
define i32 @triangle(i32 %a, i32 %b) { %cond = icmp eq i32 %a, %b br i1 %cond, label %bb_true, label %bb_else bb_else: br label %bb_true bb_true: call void @g(i32 %a, i32 %b) ret i32 %b } declare void @g(i32, i32)
안녕하세요, 과제 설명에 아래와 같이 나와 있는데 위 경우에는 왜 bb_true에서 replace가 안 일어나는 것이 정답인지 궁금합니다. 혹시 알려주실 수 있으신가요? 감사합니다
please replace x with y (or y with x) for all uses of x that are (1) executed after the branch is taken
%a, %b 가 서로 같지 않은 경우에도 bb_true block에 도달이 가능하기 때문에 bb_true에서 %a = %b 라는 보장이 되지 않습니다. 따라서 해당 replace는 올바르지 않은 최적화입니다.
%a
%b
bb_true
안녕하세요, 과제 설명에 아래와 같이 나와 있는데 위 경우에는 왜 bb_true에서 replace가 안 일어나는 것이 정답인지 궁금합니다. 혹시 알려주실 수 있으신가요? 감사합니다