Closed
Description
https://llvm.godbolt.org/z/s61x8M7Tf
declare void @use(i32)
declare void @dummy()
define void @test(i1 %c, i32 %a, i32 %b) {
%s = select i1 %c, i32 %a, i32 %b
br i1 %c, label %if, label %else
if:
call void @dummy()
call void @use(i32 %s)
ret void
else:
call void @use(i32 %s)
call void @dummy()
ret void
}
We have a branch on the same condition as the select, so we should sink the select arms into the branches. It's pointless to compute the select value in the common code path:
declare void @use(i32)
declare void @dummy()
define void @test(i1 %c, i32 %a, i32 %b) {
br i1 %c, label %if, label %else
if:
call void @dummy()
call void @use(i32 %a)
ret void
else:
call void @use(i32 %b)
call void @dummy()
ret void
}